如何用单条SQL查询计算经理的总薪资(含自身薪资)
问题分析与解决方案
需求回顾
基于给定的Employees表,需要用单条SQL实现:
- 计算每位经理的总薪资(自身薪资 + 直属下属薪资总和)
- 无直属下属时,总薪资仅为自身薪资
- 结果需包含经理姓名、自身薪资、下属薪资总和三个字段
原查询问题
你提供的查询存在两个核心问题:
- 未满足需求的第三个要求,缺少
自身薪资和下属薪资总和的输出字段 - 虽然总薪资的计算逻辑在大部分场景下正确,但未明确拆分出需求要求的明细字段,不利于结果校验
修正后的SQL查询
SELECT e1.Name AS `Manager Name`, e1.Salary AS `Own Salary`, COALESCE(SUM(e2.Salary), 0) AS `Subordinates Total Salary`, e1.Salary + COALESCE(SUM(e2.Salary), 0) AS `Total Salary` FROM Employees e1 LEFT JOIN Employees e2 ON e1.ID = e2.ManagerID GROUP BY e1.ID, e1.Name, e1.Salary ORDER BY `Total Salary` DESC;
关键说明
- LEFT JOIN:确保所有员工(即使没有下属)都能被查询到,不会被过滤
- COALESCE(SUM(e2.Salary), 0):当经理没有直属下属时,
SUM(e2.Salary)会返回NULL,用COALESCE将其转换为0,避免总薪资计算出现NULL - 字段拆分:明确输出自身薪资和下属薪资总和,完全匹配需求的三个字段要求
- GROUP BY:基于主键
e1.ID分组,同时包含姓名和薪资字段,符合SQL标准,避免分组逻辑错误
执行结果
执行上述查询后,会得到符合期望的结果:
| Manager Name | Own Salary | Subordinates Total Salary | Total Salary |
|---|---|---|---|
| Alice | 90000 | 165000 | 255000 |
| Bob | 80000 | 145000 | 225000 |
| Charlie | 85000 | 72000 | 157000 |
| David | 75000 | 0 | 75000 |
| Eve | 70000 | 0 | 70000 |
| Frank | 72000 | 0 | 72000 |
内容的提问来源于stack exchange,提问作者Safwaa Samin
相关产品推荐
相关产品推荐

