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

MySQL查询需求:统计各部门所有状态数量,无记录返回0

解决MySQL统计所有部门-状态组合(含0值)的问题

这问题我之前处理过,你当前的查询只返回有实际记录的部门-状态组合,要得到包含0的完整结果,核心是先构建所有部门和所有状态的全量组合,再和你的业务数据关联统计。

问题原因

你的原语句直接从result表分组聚合,只有存在对应记录的Dept+Status组合才会被输出,像部门c没有Pos状态的记录,自然就不会出现在结果里。

解决方案:生成全量组合后左连接统计

我们可以先提取所有唯一的部门和所有唯一的状态,通过交叉连接(CROSS JOIN)生成所有可能的组合,再左连接到原表统计数量:

SELECT 
    d.Dept,
    s.Status,
    COUNT(r.Status) AS Count
FROM 
    -- 获取所有唯一部门
    (SELECT DISTINCT Dept FROM result) d
-- 交叉连接所有唯一状态,生成全量部门-状态组合
CROSS JOIN 
    (SELECT DISTINCT Status FROM result) s
-- 左连接原表,保留所有全量组合
LEFT JOIN 
    result r ON d.Dept = r.Dept AND s.Status = r.Status
-- 按部门和状态分组统计
GROUP BY 
    d.Dept, s.Status
ORDER BY 
    s.Status DESC, d.Dept;

效果说明

  • CROSS JOIN会生成所有部门和状态的笛卡尔积,比如你的场景里就是a/b/c三个部门 × Neg/Pos两个状态,得到6个组合。
  • LEFT JOIN确保即使原表中没有对应记录(比如部门c的Pos),这个组合也会被保留,此时r.Status为NULL。
  • COUNT(r.Status)会自动忽略NULL值,所以没有记录的组合会返回0,正好符合你的预期结果。

执行这个语句后,就能得到你想要的包含c | Pos | 0的完整统计结果了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:09:21