정미나닷컴
[Oracle] 오라클 순위 함수 본문
RANK()
- 순위를 반환하는 함수
SELECT EMPLOYEE_ID, SALARY,
RANK() OVER (ORDER BY SALARY DESC) SALARY_RANKING
FROM EPLOYEES;
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 ;
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 ;
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 ;
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 ;
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 ;
'IT' 카테고리의 다른 글
[Browser] SNS 웹브라우저 RockMelt (8) | 2011.01.06 |
---|---|
[Java] 자바 Sort (0) | 2010.12.29 |
[Oracle] 오라클 데이터 타입 LOB (0) | 2010.11.16 |
[Oracle] 오라클 일반적인 날짜형 함수 (0) | 2010.11.03 |
[Oracle] 오라클 현재 날짜를 반환하는 함수 (0) | 2010.11.03 |