우리가 일반적으로 점수의 순위는 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() 함수는 중복 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
- 구루비 강좌는 개인의 학습용으로만 사용 할 수 있으며, 다른 웹 페이지에 게재할 경우에는 출처를 꼭 밝혀 주시면 고맙겠습니다.~^^
- 구루비 강좌는 서비스 제공을 위한 목적이나, 학원 홍보, 수익을 얻기 위한 용도로 사용 할 수 없습니다.