使用密集排名为所有每个分区列获取相同的排名号

问题描述

下面的例子是我的学习目的。

select dense_rank() over(partition by job order by salary desc) as rank,ename,job,salary 
from emp;

输出

rank    ename   job     salary
1       SCott   ANALYST 3000
1       FORD    ANALYST 3000
1       MILLER  CLERK   1300
2       AdamS   CLERK   1100
3       JAMES   CLERK   950
4       SMITH   CLERK   800
1       JOnes   MANAGER 2975
2       BLAKE   MANAGER 2850
3       CLARK   MANAGER 2450
1       KING    PRESIDENT       5000
1       ALLEN   SALESMAN        1600
2       TURNER  SALESMAN        1500
3       MARTIN  SALESMAN        1250
3       WARD    SALESMAN        1250

期望得到以下结果。能否请您帮助我使用密集排名获取配置单元查询

预期结果:


rank    ename   job     salary
1       SCott   ANALYST 3000
1       FORD    ANALYST 3000
2       MILLER  CLERK   1300
2       AdamS   CLERK   1100
2       JAMES   CLERK   950
2       SMITH   CLERK   800
3       JOnes   MANAGER 2975
3       BLAKE   MANAGER 2850
3       CLARK   MANAGER 2450
4       KING    PRESIDENT       5000
5       ALLEN   SALESMAN        1600
5       TURNER  SALESMAN        1500
5       MARTIN  SALESMAN        1250
5       WARD    SALESMAN        1250

解决方法

您的DENSE_RANK为每个职位的新工资创建一个新数字。为了获得预期的结果,您必须删除分区并按作业排序:

dense_rank() over(order by job)

现在每个新工作都会得到一个新号码。