Databricks社区版Items表两类SQL查询问题求助
解决你的SQL查询问题
第一个问题:修正查询语句的错误
你的查询语句存在几个语法和逻辑问题,直接导致了ParseException错误,逐个拆解说明:
表名的方括号语法错误
Databricks基于Spark SQL,不需要用方括号[]包裹表名——这种写法常见于SQL Server等数据库,但Spark SQL不支持。直接写表名Items即可。列名不匹配
你表中的日期列是datetime,但查询里写的是Date,这会导致后续执行时出现"列不存在"的错误,需要统一为datetime。日期格式不兼容+引号错误
- 你最后一个日期值用了反引号`而非单引号',这是基础语法错误;
- 原表的
datetime格式是MM/dd/yyyy HH:mm(比如10/10/1972 19:00),直接用'01-01-1970'这种字符串和它比较,Spark无法正确解析日期逻辑。需要用to_date()函数把datetime字段转换为标准日期类型,再和yyyy-MM-dd格式的日期字面量比较。
修正后的查询语句:
SELECT COUNT(*) AS total_items_sold FROM Items WHERE to_date(datetime, 'MM/dd/yyyy HH:mm') BETWEEN '1970-01-01' AND '2000-12-31'
第二个问题:查询美国销量最高的州
要解决这个问题,需要按state分组统计销量,过滤出美国的记录,然后按销量降序排序取第一条:
SELECT state, COUNT(*) AS total_sales FROM Items WHERE country = 'United States' -- 注意:如果你的数据里country值是'USA',请替换成对应值 GROUP BY state ORDER BY total_sales DESC LIMIT 1
如果想查看所有美国各州的销量排名,去掉LIMIT 1即可。
内容的提问来源于stack exchange,提问作者Cyber Chick
相关产品推荐
相关产品推荐

