sql - SQL MAX((SUM)) 组合使用
问题描述
我有两张桌子:
EMPLOYEE: ID|DEPARTMENT_ID|CHIEF_ID|NAME|SALARY
DEPARTMENT: ID|NAME
这里的任务是获取所有员工最高工资总额的部门列表。
我正在尝试使用的查询(完成但没有结果):
SELECT s.DEPARTMENT_ID, s.SALARY_SUM
FROM (SELECT DEPARTMENT_ID, SUM(SALARY) SALARY_SUM, w.ID
FROM EMPLOYEE e
JOIN DEPARTMENT w ON w.ID = e.DEPARTMENT_ID
GROUP BY e.DEPARTMENT_ID, w.ID) s
WHERE s.SALARY_SUM = (SELECT MAX(SALARY) MaxSum
FROM EMPLOYEE w1
WHERE w1.ID = s.ID)
解决方案
您在这里基本上有 4 个数据集。
- 员工 e
- 部门 w
- 子查询1
- Subquery2(where 子句)
数据集 3 具有按部门 ID 聚合的薪水。数据集 4 的每个部门的员工薪水最高。
Where 子句是比较 3 到 4,其中 SALARY_SUM = MaxSum。因为 SALARY_SUM 是按部门 ID 聚合的,而 MaxSum 是最大的个人工资,所以这个 where 子句将只返回有 1 人的部门的结果(或者如果人们的工资为 0 美元)。
如果一个部门有多人带薪,则该部门的薪水之和永远大于该部门最大的个人薪水。
推荐阅读
- android - 带有属性的运行时主题选择
- javascript - 路由的身份验证中间件不起作用
- java - 将 Hibernate createNativeQuery 与 TypedQuery 一起用于 Integer.class
- r - 处理别名变量的正确方法是什么?
- sql - 对具有不同值的两个字段进行分组,并按顺序选择特定值
- c++ - 在 switch 语句中将多个案例组合在一起
- r - 用 lapply 替换 for 循环
- javascript - AJAX 表单发布,即使它被禁用
- selenium - Selenium moveByOffset 不会将焦点移动到提供的坐标
- html - 改变跨度位置