본문 바로가기

Dev. Database

[분석함수] RANK(), DENSE_RANK()

분석 함수를 이용하면, 특정 조건에 맞는 상위 혹은 하위 N개의 데이터만 추출하는 TOP n 쿼리도 쉽게 작성 가능하다.

각 부서별로 급여가 상위3위까지인 사원을 추출하는 쿼리는 아래와 같이 작성할 수 있다.

SELECT *
  FROM (SELECT DEPARTMENT_ID
		       , EMP_NAME
		       , SALARY
		       , DENSE_RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) DEP_RANK
		  FROM EMPLOYEES
	   )
WHERE DEP_RANK <= 3

 

 

 

 
SELECT DEPARTMENT_ID
       , EMP_NAME
       , SALARY
       , RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY DESC) DEP_RANK
  FROM EMPLOYEES;

 

SELECT DEPARTMENT_ID
       , EMP_NAME
       , SALARY
       , DENSE_RANK() OVER (PARTITION BY DEPARTMENT_ID ORDER BY SALARY) DEP_RANK
  FROM EMPLOYEES;
  

 

 

같은 순위에 대해서 건너뛰지 않고 동일 랭크로 처리한다.