우리가 일반적으로 점수의 순위는 ODRDER BY desc를 해서 볼수가 있습니다.
하지만 똑같은 점수를 가진 사람들이 많이 나올때..
예를 들면.100, 90, 90, 80 이렇게 점수가 나오면..
순위를 1,2,2,4 이렇게 부여 해야 합니다
이거 SQL문으로 할려고 하니 어렵더라구요.. 내 머리가 나쁜건지..
암튼 오라클 8.1.6 버전부터는 아주 쉽게 순위를 부여 할 수 있습니다..
아래 내용을 참고해 보세요...
오라클에서는 RANK Function을 사용해서 순위를 간편하게 부여할 수 있습니다.
RANK Function는 oracle 8i(8.1.6) 부터 가능합니다.
8.1.6 이전 버전에서는 사용 할 수 없습니다. ORA-923 error 가 발생 합니다.
plsql 내에서는 oracle 9i 부터 가능합니다. 8.1.6에서는 ORA-900 error가 발생 합니다.
-- scott유저로 접속을 합니다.
SQLPLUS scott/tiger
-- 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
☞ 그룹별로 순위를 부여 하는 법
-- 위 예제는 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
'DataBase > Oracle' 카테고리의 다른 글
[퍼옴]옵티마이져(OPTIMIZER) (0) | 2008.08.08 |
---|---|
오라클에서 RANDOM NUMBER를 생성하는 방법(DBMS_RANDOM) (0) | 2008.08.08 |
오라클 HINT (0) | 2008.08.08 |
오라클 플래쉬백 사용하기(Flashback Query) (0) | 2008.08.08 |
오라클 초보 사용자를 위한 팁 (0) | 2008.08.08 |