*적용되는 각 행 (파티션의 행 또는 쿼리에 의해 반환되는 각 행)에 1부터 시작하는 order_by_clause에서 지정된 행의 순서로 고유 번호를 할당한다.
*지정된 범위의 ROW_NUMBER 값을 검색하는 쿼리에서 ROW_NUMBER를 사용하여 서브 쿼리를 중첩하여 내부 쿼리 결과에서 정확한 행의 일부를 찾을 수 있다.
위에 설명이 무슨 말인지 예제를 보며 확인하자.
* 예제) employee 테이블의 각 부서에서 가장 급여가 높은 직원 3명을 검색하라.
SELECT department_id, first_name, last_name, salary
FROM
(
SELECT
department_id, first_name, last_name, salary,
ROW_NUMBER() OVER (PARTITION BY department_id ORDER BY salary desc) rn
FROM employees
)
WHERE rn <= 3
ORDER BY department_id, salary DESC, last_name;
코드분석
- 서브쿼리로 ROW_NUMBER를 이용하여 department_id 별로 파티션을 나누고(PARTITION BY) 나눠진 상태에서 급여를 내림차순으로 정렬(ORDER BY salary desc)