더북(TheBook)

예제 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 함수는 데이터 값의 크기가 같더라도 공통 순위는 무시하고 차례대로 순위를 부여합니다. 순위 함수는 상품 매출이나 직원 연차 등 값에 대해 순위를 매기고자 할 때 활용할 수 있습니다. 공통 순위가 인정되거나 인정되지 않는 상황에 따라 순위 함수의 종류를 선택해서 활용하면 됩니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.