如何在BigQuery中按年份统计各primary_type犯罪的发生次数?
问题解答
报错原因分析
你写的查询报错,是因为SELECT DISTINCT仅返回primary_type列,year列不在最终结果集中,因此ORDER BY无法引用该列,这就是报错信息提示的核心原因。
需求实现方案
你的真实需求是统计每种犯罪类型每年的发生次数,不需要使用子查询,直接通过GROUP BY分组统计即可,这是最直接高效的写法:
SELECT primary_type, year, COUNT(*) AS crime_count FROM `bigquery-public-data.chicago_crime.crime` GROUP BY primary_type, year ORDER BY primary_type, year
语句说明
GROUP BY primary_type, year:将数据按犯罪类型(primary_type)和年份(year)进行分组,每个分组对应某一类型在某一年的所有犯罪记录COUNT(*) AS crime_count:统计每个分组内的记录数量,即该类型当年的犯罪次数ORDER BY primary_type, year:按犯罪类型和年份排序,让结果更易读
子查询练习写法(非必需)
如果只是为了练习子查询的使用,也可以将分组逻辑放到子查询中,但这属于冗余操作,实际场景不推荐:
SELECT primary_type, year, crime_count FROM ( SELECT primary_type, year, COUNT(*) AS crime_count FROM `bigquery-public-data.chicago_crime.crime` GROUP BY primary_type, year ) AS subquery ORDER BY primary_type, year
内容的提问来源于stack exchange,提问作者Krsna's Shinobi
相关产品推荐
相关产品推荐

