그룹안에서 순위를 정할때도 씀
오라클에서는 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 > SQL' 카테고리의 다른 글
Access(*.MDB) 비교 쿼리 (오라클의 Decode, Swich Case문 처럼 사용하기) (0) | 2010.06.29 |
---|---|
오라클- 크로스 탭(cross tab) 쿼리 흉내내기.. (0) | 2009.09.01 |
날짜와 날짜 사이의 날 모두 구하기 (0) | 2008.07.24 |
한글 자음(초성) 으로 시작하는 문자열 검색하기. (0) | 2008.07.24 |
sybase 페이징 기법 (0) | 2008.07.24 |