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

如何编写SQL查询获取每月薪资最高的员工姓名和对应薪资

正确查询实现

原有直接按month分组取id和max(salary)的写法存在逻辑缺陷:返回的id不保证是对应最高薪资的员工id,无法直接关联员工表得到正确姓名。下面给出两种可行方案:

方案1:窗口函数实现(支持SQL8.0及以上版本,写法简洁)

SELECT e.name, t.salary
FROM (
    SELECT 
        id, 
        salary,
        RANK() OVER(PARTITION BY month ORDER BY salary DESC) AS rk
    FROM salary_data
) t
JOIN emp_data e ON t.id = e.id
WHERE t.rk = 1;

说明:用RANK()窗口函数给每个月份的薪资做降序排名,取排名为1的记录即为当月最高薪资的员工,再关联emp_data表即可拿到对应姓名。如果某月份存在多个员工薪资同为最高的情况,所有符合条件的员工都会被返回。

方案2:子查询匹配实现(兼容所有SQL版本)

SELECT e.name, s.salary
FROM salary_data s
JOIN emp_data e ON s.id = e.id
JOIN (
    SELECT month, MAX(salary) AS max_sal
    FROM salary_data
    GROUP BY month
) m ON s.month = m.month AND s.salary = m.max_sal;

说明:先通过子查询计算出每个月的最高薪资值,再关联回薪资表匹配到所有拿到该薪资的员工,最后关联员工表拿到姓名。


测试返回结果

基于你提供的测试数据,执行后输出结果如下:

namesalary
RAMESH50000
RAJEEV51000
RAJEEV72000
RAMESH49000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 17:57:03