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

如何编写SQL查询在每条记录中显示对应部门的最高薪资?

如何在SQL查询中为每条记录添加对应部门的最高薪资列

我有如下员工表:

EmpidEmpnamedeptsalary
1abc1001000
2def1002000
3ghi200500
4jkl200700
5mno200800

希望通过SQL查询得到如下结果集,在每条记录中新增对应部门的最高薪资列dept_maxsal:

EmpidEmpnamedeptsalarydept_maxsal
1abc10010002000
2def10020002000
3ghi200500800
4jkl200700800
5mno200800800

解决方案

方法一:使用窗口函数(推荐)

大多数现代SQL数据库(MySQL 8.0+、PostgreSQL、SQL Server、Oracle等)都支持窗口函数,这是最简洁高效的实现方式:

SELECT 
    Empid,
    Empname,
    dept,
    salary,
    MAX(salary) OVER (PARTITION BY dept) AS dept_maxsal
FROM 
    employees;

逻辑说明:PARTITION BY dept将数据按部门分组,MAX(salary)计算每组内的最高薪资,OVER子句确保该值被映射到对应部门的每一条记录上。

方法二:使用子查询关联(兼容旧版数据库)

如果你的数据库不支持窗口函数(如MySQL 5.x及以下),可以用子查询先计算各部门最高薪资,再关联原表:

SELECT 
    e.Empid,
    e.Empname,
    e.dept,
    e.salary,
    d.dept_maxsal
FROM 
    employees e
JOIN 
    (SELECT dept, MAX(salary) AS dept_maxsal FROM employees GROUP BY dept) d
ON 
    e.dept = d.dept;

逻辑说明:子查询先按部门分组得到各部门的最高薪资临时表,再通过dept字段将临时表与原员工表关联,把最高薪资字段追加到每条记录中。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 21:34:52