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

如何在Oracle SQL中查询各部门薪资排名第三的员工?

如何找出各部门薪资排名第三的员工(Oracle SQL实现)

实现思路

要获取各部门薪资排名第三的员工,核心是按部门分组,给组内员工按薪资降序分配排名序号,再筛选出序号为3的记录。Oracle中可以通过窗口函数快速实现,常用的窗口函数有三种,对应不同的并列薪资处理逻辑:

  • ROW_NUMBER():给每条记录分配唯一序号,即使薪资相同,序号也不重复;
  • RANK():若存在并列薪资,会跳过后续序号(例如两个员工薪资并列第一,下一个员工的序号是3);
  • DENSE_RANK():并列薪资的员工获得相同序号,后续序号不跳过(例如两个员工并列第一,下一个员工的序号是2)。

示例SQL代码

以下是使用ROW_NUMBER()实现的正确代码(修正了原代码中缺少部门分组的问题):

SELECT *
FROM (
    SELECT 
        emp_id, dept_id, salary,
        ROW_NUMBER() OVER (PARTITION BY dept_id ORDER BY salary DESC) rn
    FROM employee
)
WHERE rn = 3;

代码说明

  1. 内层子查询:通过PARTITION BY dept_id按部门分组,ORDER BY salary DESC让每个部门内的员工按薪资从高到低排序,ROW_NUMBER()为每条记录分配组内序号rn;
  2. 外层查询:筛选出序号rn = 3的记录,即为各部门薪资排名第三的员工。

关于原代码的说明

原提供的代码缺少PARTITION BY dept_id,会导致全局范围内按薪资排名,无法实现"各部门"的排名需求;同时不必要的GROUP BY子句可以移除,窗口函数本身不需要分组聚合。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 09:40:00