You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL聚合函数MAX与SUM结合使用:查询总薪资最高的部门列表

SQL查询问题排查与实现

原语句错误点

  • 过滤逻辑完全错误:外层WHERE条件里的子查询取的是单个员工的最高薪资,和你计算的部门总薪资SALARY_SUM维度完全不匹配,正常不可能有相等的情况,所以没有返回结果。另外关联条件w1.ID = s.ID字段对应关系错误,s.ID是DEPARTMENT表的主键,你拿去关联EMPLOYEE表的主键,完全不符合业务逻辑。
  • 子查询设计冗余:内层子查询中关联DEPARTMENT表后返回的w.ID和e.DEPARTMENT_ID值完全一致,属于无效冗余字段。

正确实现方式

方法1:通用兼容写法(适配所有主流关系型数据库)

如果需要同时返回部门ID、部门名称、部门总薪资,且并列最高的部门全部返回,可以用以下写法:

SELECT 
    d.ID DEPARTMENT_ID,
    d.NAME DEPARTMENT_NAME,
    SUM(e.SALARY) SALARY_SUM
FROM EMPLOYEE e
INNER JOIN DEPARTMENT d ON e.DEPARTMENT_ID = d.ID
GROUP BY d.ID, d.NAME
HAVING SUM(e.SALARY) = (
    -- 先计算所有部门的总薪资,再取最大值
    SELECT MAX(dept_total)
    FROM (
        SELECT SUM(SALARY) dept_total
        FROM EMPLOYEE
        GROUP BY DEPARTMENT_ID
    ) t
)

方法2:窗口函数写法(适配支持窗口函数的数据库,如MySQL8.0+、Oracle、PostgreSQL等)

写法更简洁,自动支持并列排名场景:

SELECT DEPARTMENT_ID, DEPARTMENT_NAME, SALARY_SUM
FROM (
    SELECT 
        d.ID DEPARTMENT_ID,
        d.NAME DEPARTMENT_NAME,
        SUM(e.SALARY) SALARY_SUM,
        -- 按部门总薪资降序排名,相同薪资排名一致
        RANK() OVER(ORDER BY SUM(e.SALARY) DESC) AS salary_rank
    FROM EMPLOYEE e
    INNER JOIN DEPARTMENT d ON e.DEPARTMENT_ID = d.ID
    GROUP BY d.ID, d.NAME
) t
WHERE salary_rank = 1

内容的提问来源于stack exchange,提问作者Bohdan Zdor

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:54:01