dbms:oracle:devel:rank
Oracle RANK() Function
- 일반적으로 순위는 ODRDER BY DESC 를 통해 볼수가 있습니다.
- 하지만 똑같은 점수를 가진 사람이 존재하면 표현하기 어렵습니다.
예를 들면.100, 90, 90, 80 이렇게 점수가 나오면, 순위를 1,2,2,4 이렇게 부여 해야 합니다 - 오라클 8.1.6 버전부터는 RANK() 함수를 통해 쉽게 구현할 수 있습니다.
버젼이 낮으면 ORA-923 ERROR 발생 - PLSQL 내에서는 Oracle 9i 부터 가능합니다.
버젼이 낮으면 ORA-900 ERROR 발생
순위부여 하는 예제
- RANK() 함수를 사용하여 급여 순으로 순위를 부여한 예제 입니다.
- RK의 출력값을 보면 급여가 같으면 같은 순위로 부여가 됩니다.
SQL> conn scott/tiger 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
그룹별로 순위를 부여 하는 예제
- 위 예제는 deptno를 파티션으로 나누어서 부서별로 순위를 부여 합니다.
- 특정한 그룹별로 순위를 부여하고 싶을때 사용 하면 편합니다.
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
dbms/oracle/devel/rank.txt · 마지막으로 수정됨: 저자 starlits
