Search code examples
sqlhivehiveqlwindow-functions

Get the same rank number for all each partition columns using Dense Rank


Below example is for my learning purpose.

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

output:

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

Am expecting the below result .Can you please someone help me to get the hive query using the dense rank

Expected result:


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

Solution

  • Your DENSE_RANK creates a new number for each new salary per job. To get your expected result you must remove the partitioning and order by job:

    dense_rank() over(order by job)
    

    Now every new job gets a new number.