더북(TheBook)

예제 4-17 RANK, DENSE_RANK, ROW_NUMBER 함수를 각각 이용해 employees 테이블 직원이 속한 department_id 안에서 salary 값이 높은 순서대로 순위를 매겨 출력해 보세요.

SELECT A.employee_id,

       A.department_id,

       B.department_name,

       salary,

       RANK()       OVER(PARTITION BY A.department_id ORDER BY salary DESC) RANK_급여,

       DENSE_RANK() OVER(PARTITION BY A.department_id ORDER BY salary DESC) DENSE_RANK_급여,

       ROW_NUMBER() OVER(PARTITION BY A.department_id ORDER BY salary DESC) ROW_NUMBER_급여

FROM employees A, departments B

WHERE A.department_id = B.department_id

ORDER BY B.department_id, A.salary DESC;

 

실행 결과

 

이번에는 전체가 아닌 PARTITION BY 절을 사용해 department_id, 즉 부서별로 그룹화한 후 salary 값이 높은 순(내림차순)으로 순위를 매겼습니다. IT부서를 살펴보면 각 순위 함수의 특징을 알 수 있습니다. RANK 함수는 salary 값 4800을 공통 순위로 처리하되 다음 순위는 5위, DENSE_RANK 함수는 salary 값 4800을 공통 순위 처리하되 다음 순위는 4위, ROW_NUMBER 함수는 공통 순위 없이 차례대로 순위를 매겼습니다.

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