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

如何编写SQL查询各部门最高薪资并展示所有员工的完整信息

SQL问题:查询各部门最高薪资并同步展示所有员工信息

需求描述

查询各部门最高薪资,同时展示所有员工的对应信息。

表结构及测试数据

CREATE TABLE EMP 
(
    `EID` INTEGER,
    `ENAME` VARCHAR(30),
    `DEPT` VARCHAR(30),
    `SALARY` INTEGER
);

INSERT INTO EMP (`EID`, `ENAME`, `DEPT`,`SALARY`)
VALUES (111, 'BABAUL', 'HR', 3000),
       (112, 'SILK', 'IT', 1000),
       (113, 'LEATHER', 'PAN', 4000),
       (221, 'COTTON', 'IT', 2000),
       (222, 'SILK', 'PAN', 5000),
       (223, 'LEATHER', 'HR', 6000),
       (224, 'LEATHER', 'ELEC', 1500);

样例输入数据

EID ENAME   DEPT    SALARY
--------------------------
111 BABAUL  HR      3000
112 SILK    IT      1000
113 LEATHER PAN     4000
221 COTTON  IT      2000
222 SILK    PAN     5000
223 LEATHER HR      6000
224 LEATHER ELEC    1500

预期输出结果

EID ENAME   DEPT    SALARY  MAX_salary
---------------------------------------
224 LEATHER ELEC    1500     1500
111 BABAUL  HR      3000     6000
223 LEATHER HR      6000     6000
112 SILK    IT      1000     2000
221 COTTON  IT      2000     2000
113 LEATHER PAN     4000     5000
222 SILK    PAN     5000     5000

实现SQL

方案1:窗口函数实现(兼容MySQL8.0+、PostgreSQL、Oracle等主流数据库)

用开窗函数按部门分组取最高薪资,无需关联子查询,写法简洁性能更高:

SELECT 
    EID,
    ENAME,
    DEPT,
    SALARY,
    MAX(SALARY) OVER (PARTITION BY DEPT) AS MAX_salary
FROM EMP
ORDER BY DEPT, EID;

方案2:关联子查询实现(兼容MySQL5.x等不支持窗口函数的低版本数据库)

先聚合得到每个部门的最高薪资,再和原员工表关联匹配:

SELECT 
    e.EID,
    e.ENAME,
    e.DEPT,
    e.SALARY,
    m.MAX_salary
FROM EMP e
INNER JOIN (
    SELECT DEPT, MAX(SALARY) AS MAX_salary
    FROM EMP
    GROUP BY DEPT
) m ON e.DEPT = m.DEPT
ORDER BY e.DEPT, e.EID;

内容的提问来源于stack exchange,提问作者Mrutyunjay Nayak

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 06:57:01