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

如何让SQL分组查询显示无数据的部门行(含0值)

实现所有部门销售额统计(含无数据部门显示0)

解决这个问题的核心是确保查询结果包含所有目标部门,哪怕对应没有销售数据。关键思路是用完整的部门列表作为主表,左连接销售数据的分组统计结果,再通过COALESCE函数把无匹配时的NULL转换成0。

场景1:已有专门的部门表(如departments)

如果你的数据库里有存储所有部门信息的表(比如包含department_name字段),直接用这个表做主表左连接销售表即可:

SELECT 
    d.department_name AS 部门,
    COALESCE(SUM(s.amount), 0) AS 销售额
FROM departments d
LEFT JOIN sales s ON d.department_name = s.department
GROUP BY d.department_name
ORDER BY d.department_name;

场景2:无专门部门表,临时生成部门列表

如果没有单独的部门表,可以通过子查询生成包含A、B、C、D的临时部门列表,再左连接销售数据:

SELECT 
    dept.部门,
    COALESCE(SUM(s.amount), 0) AS 销售额
FROM (
    -- 生成所有目标部门的临时列表
    VALUES ('A'), ('B'), ('C'), ('D')
) AS dept(部门)
LEFT JOIN sales s ON dept.部门 = s.department
GROUP BY dept.部门
ORDER BY dept.部门;

注意事项

  • 部分旧版本数据库(如MySQL 8.0之前)不支持VALUES子句,可以用UNION ALL替代生成部门列表:
    SELECT 'A' AS 部门 UNION ALL
    SELECT 'B' UNION ALL
    SELECT 'C' UNION ALL
    SELECT 'D'
    
  • 必须基于部门列表的字段做GROUP BY,不能用销售表的部门字段,否则会丢失无销售数据的部门行
  • COALESCE函数的作用是把SUM返回的NULL(无匹配销售数据时)替换为0,保证结果格式统一

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 18:50:55