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 个数据集。
- 员工人数
- 部门 w
- 子查询1
- 子查询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
我有两个表:
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 个数据集。
- 员工人数
- 部门 w
- 子查询1
- 子查询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