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

SQL使用GROUP BY分组统计总记录数与条件匹配数结果异常如何修正

问题原因

你当前使用的子查询没有和外层分组的shift字段做关联,统计的是全表中所有event=1的总条数,因此每个分组返回的totalEvents都是全局统计值,无法按班次拆分。

正确解法(推荐:条件聚合)

不需要额外嵌套子查询,直接在聚合函数中加条件判断即可,写法更简洁、执行效率也更高:

SELECT 
    shift,
    COUNT(*) AS totalShifts,
    SUM(CASE WHEN event = 1 THEN 1 ELSE 0 END) AS totalEvents
FROM `table`
GROUP BY shift

原理是聚合时,只对每个分组内event=1的行计数,不符合的行统计为0,求和后就是当前班次的event=1总条数。

如果需要直接返回你示例中拼接好的字符串格式,可以增加字符串拼接逻辑,以MySQL为例:

SELECT CONCAT(shift, ' - ', COUNT(*), ' - ', SUM(CASE WHEN event = 1 THEN 1 ELSE 0 END)) AS result
FROM `table`
GROUP BY shift
其他可选解法(关联子查询写法,不推荐)

如果你坚持要用子查询实现,需要给表加别名,关联外层的shift字段:

SELECT 
    t.shift,
    COUNT(t.shift) AS totalShifts,
    (SELECT COUNT(*) FROM `table` t2 WHERE t2.shift = t.shift AND t2.event = 1) AS totalEvents
FROM `table` t
GROUP BY t.shift

这种写法需要对子查询做多次扫描,数据量大时性能远低于条件聚合,仅做参考。

内容的提问来源于stack exchange,提问作者Addison Waege

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:07