You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL单查询双统计:每年事故总数与车祸数统计异常排查

解决MySQL按年统计事故总数与车祸数量的问题

嘿,我一眼就看出你当前查询的问题啦!你写的语句里犯了两个关键错误:

  • 首先,WHERE Car = 1直接过滤掉了所有非车祸的事故,那自然没法统计所有事故总数了;
  • 其次,GROUP BY Year, Car会把年份和是否为车祸分成不同的组,再加上两个Count(*)都是统计当前组的行数,结果自然Total和Car的值完全一样,根本达不到你要的效果。

正确的查询写法

咱们用条件聚合就能搞定这个需求,不需要过滤掉非车祸数据,而是在聚合函数里判断是否为车祸:

SELECT 
    Year,
    COUNT(*) AS Accidents, -- 统计每年所有事故总数
    COUNT(CASE WHEN Car = 1 THEN 1 END) AS Car -- 仅统计Car=1的车祸数量
FROM ACCIDENTS
GROUP BY Year
ORDER BY Year ASC;

为什么这么写?

  • COUNT(*)会统计当前分组(每年)里的所有行数,也就是该年份的事故总数;
  • COUNT(CASE WHEN Car = 1 THEN 1 END)的逻辑是:当Car=1时返回1,否则返回NULL,而COUNT函数会自动忽略NULL值,所以最终只会统计符合车祸条件的行数。

示例输出

执行这个查询后,你就能得到和期望一致的结果:

YearAccidentsCar
199050025
199152118

内容的提问来源于stack exchange,提问作者Shiro Pie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:13:17