본문 바로가기
DB/Oracle

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

by 놀러와요 2019. 9. 6.
반응형

 우리가 일반적으로 점수의 순위는 ORDER BY DESC를 해서 볼수가 있다.

  하지만 똑같은 점수를 가진 사람들이 많이 나올때, 예를 들면.100, 90, 90, 80 이렇게 점수가 나오면 순위를 1,2,2,4 이렇게 부여 해야 한다.

  이럴 경우 RANK 함수를 사용하여 쉽게 순위를 부여 할 수 있다.

간단 예제

  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

 

- 강좌 URL : http://www.gurubee.net/lecture/1284

반응형

'DB > Oracle' 카테고리의 다른 글

뷰 설명 달기  (0) 2019.09.17
오라클 hint 모음  (0) 2019.09.06
DB 이중화?  (0) 2019.09.06
[오라클] RAC(Real Application Cluster)이란?  (0) 2019.09.06
오라클 트리거란?  (0) 2019.09.06