如何将CASE语句输出与AVG函数结果放在同一查询列
问题原因
你写的SQL出现额外第三列,是因为你将CASE判断作为独立列放在了SELECT从句中,同时分组逻辑存在错误:GROUP BY加入Employee.ID会让分组粒度变成「部门+单个员工」,无法正确计算部门整体的平均薪资。
修正代码
你可以直接将空值判断作用在平均薪资的计算结果上,不需要单独新增列,同时修正分组规则即可:
SELECT Department.NAME, COALESCE(AVG(Employee.salary), 0) AS avg_slr FROM Department LEFT JOIN Employee ON Department.ID = Employee.department_ID GROUP BY Department.NAME
如果想要保留CASE写法也可以调整成如下格式:
SELECT Department.NAME, CASE WHEN AVG(Employee.salary) IS NULL THEN 0 ELSE AVG(Employee.salary) END AS avg_slr FROM Department LEFT JOIN Employee ON Department.ID = Employee.department_ID GROUP BY Department.NAME
逻辑说明
COALESCE函数会返回传入参数中第一个非空的值,当部门没有关联的员工时,AVG(Employee.salary)的计算结果为NULL,此时就会返回0,完全符合你的需求。GROUP BY仅保留Department.NAME即可,不需要按员工ID分组。
内容的提问来源于stack exchange,提问作者Chowis
相关产品推荐
相关产品推荐

