Oracle

RANK, DENSE_RANK 함수

나는아이스크림 2021. 5. 24. 15:45
728x90

 

오라클에서 순위를 매기는 함수 중 RANK, DENSE_RANK 함수가 있다

특정 범위(PARTITION) 내에서 순위를 구할 수도 있고 전체 범위에 대한 순위를 구할 수도 있다 

RANK 와 DENSE_RANK 의 차이점은 문법을 활용하는 방법은 똑같으나

동일한 순위를 하나의 건수로 취급하는 건 DENSE_RANK 이다

 

예를들어

RANK 의 경우           : 1등, 2등, 2등, 4등

DENSE_RANK 의 경우 : 1등, 2등, 2등, 3등

 

DENSE_RANK 의 경우 2등이 2개이지만 하나의 건수로 취급하여 다음 등수는 3등이 된다

 

 

 

 

함수의 사용법은 아래와 같다

전체 범위에서 속성을 기준으로 순위를 구함
RANK() OVER(ORDER BY 속성 DESC/ASC)

 

 

속성1을 특정범위로 하여 속성2를 기준으로 순위를 구함
RANK() OVER(PARTITION BY 속성1 ORDER BY 속성2 DESC/ASC)       

 

 

 

 

 

SQLD 에 있는 간단한 예시로 문법을 살펴보자

[예제] 사원 데이터에서 급여가 높은 순서와 JOB 별로 급여가 높은 순서를 같이 출력한다

 

 

문법을 위의 예시에 적용시켜보면 

급여를 기준으로 순위를 구하는데  1. 전체 범위에서    2. JOB 를 특정범위로 해서 구해야한다

 

SELECT JOB, ENAME, SAL,
	RANK() OVER(ORDER BY SAL DESC) ALL_RANK,
	RANK() OVER(PARTITION BY JOB ORDER BY SAL DESC) JOB_RANK
FROM EMP;

위와 같이 코드를 작성할 수 있다

 

 

728x90
728x90