SQL MAX((SUM)) 组合使用

SQL MAX((SUM)) combined usage

我有两个表:

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 个数据集。

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

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

Where 子句表示比较 3 和 4,其中 SALARY_SUM = MaxSum。因为 SALARY_SUM 是按部门 ID 聚合的,而 MaxSum 是最大的个人工资,所以这个 where 子句只会 return 部门有 1 个人的结果(或者如果人们的工资为 $0)。

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

这将为您提供所有从员工那里获得最高 Sum 的代币

CREATE tABLe EMPLOYEE(DEPARTMENT_ID INT, SALARY INT)
GO
CREATE TABLe DEPARTMENT(ID int)
GO
WITH CTE as (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)
     
SELECT s.DEPARTMENT_ID, s.SALARY_SUM
 
FROM CTE s

WHERE s.SALARY_SUM = (SELECT MAX(SALARY_SUM) MaxSum

                    FROM CTE w1 )
GO
DEPARTMENT_ID | SALARY_SUM
------------: | ---------:

db<>fiddle here