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

SQL问题:查询各薪资等级下工龄最长前2名员工结果异常求解

原有SQL问题排查
  • 核心逻辑不符合需求:你的WHERE条件子查询是从全量员工表取工龄最长的2个值,没有按薪资等级分组,完全无法实现「每个薪资等级下取工龄最长2名员工」的要求
  • 子查询逻辑错误:对Experience字段group by后取top 2,只会返回全局最高的2个工龄数值,会把所有等级里工龄等于这两个值的员工都筛选出来,和按等级取TOP的需求完全不匹配
正确实现

使用窗口函数按薪资等级分组排序后取TOP 2即可,代码如下:

SELECT GRADE, NAME, Experience
FROM (
    SELECT  
        s.GRADE, 
        e.NAME,  
        e.Experience,
        -- 按薪资等级分组,组内按工龄倒序排序,生成序号
        ROW_NUMBER() OVER(PARTITION BY s.GRADE ORDER BY e.Experience DESC) AS rn
    FROM SALARY_GRADE as S
    JOIN EMPLOYEE_SALGRADE AS ES ON S.GRADE = es.GRADE_NO
    JOIN EMPLOYEE as e ON es.Employee_no = e.EMPLOYEE_NO
) t
WHERE rn <= 2
-- 可选:按等级、工龄倒序排序输出
ORDER BY GRADE, Experience DESC

补充说明

如果需要处理工龄相同的并列场景,可以将ROW_NUMBER()替换为RANK(),如果同等级有多个工龄相同的员工并列第2,会全部返回,你可以根据实际需求选择。

内容的提问来源于stack exchange,提问作者Rafał Rymuza

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 01:36:07