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() 함수
dbms/oracle/devel/rank.txt · 마지막으로 수정됨: 2007/07/02 02:58 저자 starlits