예제 4-16 RANK, DENSE_RANK, ROW_NUMBER 함수를 각각 이용해 employees 테이블의 salary 값이 높은 순서대로 순위를 매겨 출력해 보세요.
SELECT employee_id,
salary,
RANK() OVER(ORDER BY salary DESC) RANK_급여,
DENSE_RANK() OVER(ORDER BY salary DESC) DENSE_RANK_급여,
ROW_NUMBER() OVER(ORDER BY salary DESC) ROW_NUMBER_급여
FROM employees;
실행 결과
순위 함수 안에 ORDER BY salary DESC 절을 이용해서 salary 값이 높은 순(내림차순)으로 정렬하고 순위를 매겼습니다. employee_id별 salary 값을 살펴보면 employee_id가 101과 102인 직원의 salary 값의 크기가 같습니다. 이런 경우에는 함수에 따라 순위를 매기는 방식이 달라지는데 RANK 함수와 DENSE_RANK 함수는 101과 102 직원에게 순위를 동일하게 2위로 부여합니다. 하지만 다음 순위인 145 직원에게는 RANK 함수는 공통 순위만큼 건너뛰어 4위, DENSE_RANK 함수는 공통 순위 개수와 관계없이 3위로 부여합니다. ROW_NUMBER 함수는 데이터 값의 크기가 같더라도 공통 순위는 무시하고 차례대로 순위를 부여합니다. 순위 함수는 상품 매출이나 직원 연차 등 값에 대해 순위를 매기고자 할 때 활용할 수 있습니다. 공통 순위가 인정되거나 인정되지 않는 상황에 따라 순위 함수의 종류를 선택해서 활용하면 됩니다.