查找每个组中最高的两个值

时间:2017-07-03 17:25:28

标签: sql oracle greatest-n-per-group

我想找到每个部门的前2名收入者

table => staff_masters 拥有" staff_name"工作人员专栏和" dept_code"对应的部门。

我试着喜欢这个

SELECT TOP 2 staff_sal 
FROM staff_masters
GROUP BY dept_code;

请使用分组条款。

2 个答案:

答案 0 :(得分:1)

您可以使用row_number()

select sm.*
from (select dept_code, staff_sal,
             row_number() over (partition by dept_code order by staff_sal desc) as seqnum
      from staff_masters
     ) sm
where seqnum <= 2;

如果您需要不同工资,则可以使用dense_rank()而不是row_number()

答案 1 :(得分:0)

您可以使用Row_Number()窗口函数执行此操作:

Select  Dept_Code, Staff_Sal
From
(
    Select  Dept_Code, Staff_Sal, 
            Row_Number() Over (Partition By Dept_Code Order By Staff_Sal Desc) As RN
    From    Staff_Masters
) A
Where   RN <= 2
Order By Dept_Code, RN