如何在Microsoft Access SQL中查询每年犯罪最多的月份及数量
解决Microsoft Access SQL查找每年犯罪最多月份的问题
原SQL语句的问题:
- GROUP BY子句中使用
[DISTINCT CRIME_MONTH]是错误语法,Access会将其识别为需要输入的参数,这也是弹出输入框的原因。 - 仅仅按年月分组排序,没有筛选出每年中犯罪数量最多的月份记录。
正确的SQL语句如下:
SELECT t1.CRIME_YEAR, t1.CRIME_MONTH, t1.CRIME_COUNT FROM ( SELECT CRIME_YEAR, CRIME_MONTH, COUNT(*) AS CRIME_COUNT FROM CRIMEDATA GROUP BY CRIME_YEAR, CRIME_MONTH ) AS t1 INNER JOIN ( SELECT CRIME_YEAR, MAX(CRIME_COUNT) AS MAX_COUNT FROM ( SELECT CRIME_YEAR, CRIME_MONTH, COUNT(*) AS CRIME_COUNT FROM CRIMEDATA GROUP BY CRIME_YEAR, CRIME_MONTH ) AS t2 GROUP BY CRIME_YEAR ) AS t3 ON t1.CRIME_YEAR = t3.CRIME_YEAR AND t1.CRIME_COUNT = t3.MAX_COUNT ORDER BY t1.CRIME_YEAR, t1.CRIME_MONTH;
语句说明:
- 内层子查询
t2先统计每个年月的犯罪数量,得到所有年月的犯罪数明细。 - 子查询
t3基于t2的结果,按年份分组,计算出每一年的最大犯罪数量。 - 外层查询将
t1(和t2逻辑相同的年月统计结果)与t3关联,筛选出每个年份中犯罪数等于该年最大值的记录,这样就能得到每年犯罪最多的月份及对应数量。
如果存在某一年有多个月份犯罪数并列最多的情况,该语句会返回所有并列的记录。
内容的提问来源于stack exchange,提问作者KATIE.E
相关产品推荐
相关产品推荐

