如何使用MySQL统计每年的总犯罪案件数?
统计每年总犯罪案件数的SQL调整方案
当前SQL及查询结果
现有SQL仅能按年份+犯罪类别分别统计案件次数:
SELECT year_time, offense_category, COUNT(*) AS crime_incidents FROM rms_crime_incidents GROUP BY year_time, offense_category ORDER BY year_time DESC, offense_category ASC, crime_incidents ASC;
对应查询结果:
| year_time | offense_category | crime_incidents |
|---|---|---|
| 2022 | AGGRAVATED ASSAULT | 14 |
| 2022 | DAMAGE TO PROPERTY | 7 |
| 2022 | OBSTRUCTING JUDICIARY | 2 |
| 2021 | AGGRAVATED ASSAULT | 443 |
| 2021 | BURGLARY | 204 |
| 2021 | DAMAGE TO PROPERTY | 460 |
| 2021 | DANGEROUS DRUGS | 59 |
| 2021 | DISORDERLY CONDUCT | 14 |
调整后的SQL(统计年度总案件数)
要直接得到每年的总犯罪案件数,只需修改分组逻辑,仅按year_time分组:
SELECT year_time, COUNT(*) AS total_crime_incidents FROM rms_crime_incidents GROUP BY year_time ORDER BY year_time DESC, total_crime_incidents DESC;
预期结果示例
| year_time | total_crime_incidents |
|---|---|
| 2022 | 23 |
| 2021 | 1180 |
(注:数值为当前结果累加值,2022年总案件数=14+7+2,2021年=443+204+460+59+14)
扩展:同时查看明细与年度总计
如果需要在同一张结果表里看到每年各分类案件数+年度总数,可以使用WITH ROLLUP扩展分组功能:
SELECT year_time, COALESCE(offense_category, '年度总计') AS offense_category, COUNT(*) AS crime_incidents FROM rms_crime_incidents GROUP BY year_time, offense_category WITH ROLLUP ORDER BY year_time DESC, offense_category ASC;
该语句会在每年的分类数据后自动追加一行年度总计行,兼顾明细查看与汇总统计需求。
样本数据:
内容的提问来源于stack exchange,提问作者Blacksmith
相关产品推荐
相关产品推荐

