首页 > 解决方案 > 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)

标签: sqlsummaxsql-server-2019

解决方案


您在这里基本上有 4 个数据集。

  1. 员工 e
  2. 部门 w
  3. 子查询1
  4. Subquery2(where 子句)

数据集 3 具有按部门 ID 聚合的薪水。数据集 4 的每个部门的员工薪水最高。

Where 子句是比较 3 到 4,其中 SALARY_SUM = MaxSum。因为 SALARY_SUM 是按部门 ID 聚合的,而 MaxSum 是最大的个人工资,所以这个 where 子句将只返回有 1 人的部门的结果(或者如果人们的工资为 0 美元)。

如果一个部门有多人带薪,则该部门的薪水之和永远大于该部门最大的个人薪水。


推荐阅读