정미나닷컴

[Oracle] 오라클 순위 함수 본문

IT

[Oracle] 오라클 순위 함수

정미나 2010. 11. 22. 14:42

RANK()
- 순위를 반환하는 함수

SELECT EMPLOYEE_ID, SALARY,
       RANK() OVER (ORDER BY SALARY DESC) SALARY_RANKING
  FROM EPLOYEES;


DENSE_RANK()
- RANK()와 비슷하지만 중복된 순위 무시

SELECT EMPLOYEE_ID, SALARY,
       DENSE_RANK() OVER (ORDER BY SALARY DESC) SALARY_RANKING
  FROM EPLOYEES ;


ROW_NUMBER()
- 1부터 각 로우별로 순차적인 값을 반환

SELECT EMPLOYEE_ID, SALARY,
       ROW_NUMBER() OVER (ORDER BY SALARY DESC) SALARY_RANKING
  FROM EPLOYEES ;



* 주의

- 잘못된 예

SELECT EMPLOYEE_ID, SALARY,
       ROW_NUMBER() OVER (ORDER BY SALARY DESC) SALARY_RANKING
  FROM EPLOYEES
 WHERE ROWNUM < 11 ;

분석함수는 ORDER BY 절을 제외하고 가장 마지막에 처리가 되므로
WHERE 절에서 10건을 걸러낸 다음 ROW_NUMBER() 함수가 적용이 되어
원하는 결과가 나오지 않는다.


- 잘된 예

SELECT T.*
  FROM ( SELECT DEPARTMENT_ID, LAST_NAME,
                ROW_NUMBER() OVER ( PARTITION BY DEPARTMENT_ID
                                      ORDER BY SALARY DESC ) SAL
  FROM EMPLOYEES) T
 WHERE T.SAL <= 3 ;