오라클에서 순위를 쉽게 부여하는법(Rank() Function)

SCOTT 사용자로 접속하여 테스트를 진행.

  
-- RANK() 함수를 사용하여 급여 순으로 순위를 부여한 예제 입니다.  
-- RK의 출력값을 보면 급여가 같으면 같은 순위로 부여가 됩니다. 

SQL> SELECT empno, ename, sal, 
     RANK() OVER (ORDER BY sal DESC ) as rk
     FROM emp; 

    EMPNO ENAME           SAL         RK
--------- ---------- --------- ----------
     7839 KING            5000          1
     7788 SCOTT           3000          2
     7902 FORD            3000          2
     7566 JONES           2975          4
     7698 BLAKE           2850          5
     7782 CLARK           2450          6
     7499 ALLEN           1600          7
     7844 TURNER          1500          8
     7934 MILLER          1300          9
     7521 WARD            1250         10
     7654 MARTIN          1250         10
     7876 ADAMS           1100         12
     7900 JAMES            950         13
     7369 SMITH            800         14
    

그룹별로 순위를 부여 하는 법

  아래 예제는특정한 그룹별로 순위를 부여 하는 예제이다.

     
SQL> SELECT deptno, ename, sal, 
     RANK() OVER (PARTITION BY deptno ORDER BY sal DESC ) as rk 
     FROM emp ;
 
 DEPTNO ENAME           SAL        RK
------- ---------- -------- ---------
     10 KING           5000         1
     10 CLARK          2450         2
     10 MILLER         1300         3
     20 SCOTT          3000         1
     20 FORD           3000         1
     20 JONES          2975         3
     20 ADAMS          1100         4
     20 SMITH           800         5
     30 BLAKE          2850         1
     30 ALLEN          1600         2
     30 TURNER         1500         3
     30 WARD           1250         4
     30 MARTIN         1250         4
     30 JAMES           950         6
    

DENSE_RANK() 함수

  DENSE_RANK() 함수는 중복 RANK의 수와 무관하게 numbering을 한다. 1등, 2등, 2등 이렇게 2등이 중복 되었는데 4등이 아니라 3등이 부여 된다.

 
SQL> SELECT empno, ename, sal,  
     DENSE_RANK() OVER (ORDER BY sal DESC ) as rk
     FROM emp;     
    
    EMPNO ENAME             SAL        RK
--------- ---------- ---------- ---------
     7839 KING             5000         1
     7788 SCOTT            3000         2
     7902 FORD             3000         2
     7566 JONES            2975         3
     7698 BLAKE            2850         4
     7782 CLARK            2450         5
     7499 ALLEN            1600         6
     7844 TURNER           1500         7
     7934 MILLER           1300         8
     7521 WARD             1250         9
     7654 MARTIN           1250         9
     7876 ADAMS            1100        10
     7900 JAMES             950        11
     7369 SMITH             800        12 
    

ROW_NUMBER() 함수

 ROW_NUMBER() 함수는 중복 RANK의 수와 무관하게 위에서부터 순차적으로 numbering을 한다. 같은 등수는 존재하지 않는다.



SQL> SELECT deptno, ename, sal,
ROW_NUMBER() OVER(ORDER BY sal DESC) as rk
FROM emp


DEPTNO ENAME SAL RK
---------- ---------- ---------- ----------
10 KING 5000 1
20 FORD 3000 2
20 SCOTT 3000 3
20 JONES 2975 4
30 BLAKE 2850 5
10 CLARK 2450 6

30 ALLEN 1600 7
30 TURNER 1500 8
10 MILLER 1300 9
30 WARD 1250 10
30 MARTIN 1250 11
20 ADAMS 1100 12
30 JAMES 950 13
20 SMITH 800 14

14 rows selected.


출처 : http://oracleclub.com/lecture/1284

You may also like...

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다