我正在寻找每个部门的前三名薪水。我可以使用RANK()或DENSE_RANK()或来完成此操作,ROW_NUMBER()但是我的表中有一些薪水相同的记录。
下面提到的是我的查询及其结果。
第20部门的前3名薪水应该是6000、3000、2975。但是有2名员工的薪水为3000,并且他们的薪水均为2。因此,我给了该部门4条记录(1为1级,2为1级)等级2和等级3的1条记录)。
请就如何获得每个部门的前三名薪水提出建议/建议。
SELECT * FROM (
SELECT EMPNO, DEPTNO, SAL,
DENSE_RANK() over (partition by deptno order by sal DESC) as RANK,
row_number() over (partition by deptno order by sal DESC) as ROWNO
from EMP)
WHERE RANK <= 3;
Run Code Online (Sandbox Code Playgroud)
Empno Deptno Salary Rank Rowno
----------------------------------------
7839 10 5000 1 1
7782 10 2450 2 2
7934 10 1300 3 3
7935 20 6000 1 1
7788 20 3000 2 2
7902 …Run Code Online (Sandbox Code Playgroud)