小编Rak*_*esh的帖子

Oracle SQL-如何使用RANK()或DENSE_RANK()或ROW_NUMBER()分析函数获取不同的行?

我正在寻找每个部门的前三名薪水。我可以使用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)

sql oracle distinct rank

4
推荐指数
2
解决办法
2万
查看次数

标签 统计

distinct ×1

oracle ×1

rank ×1

sql ×1