본문 바로가기

데이터베이스

[SQL] ROW_NUMBER() RANK() DENSE_RANK()

 

기본적으로 ROWNUM 으로 시작을 한다.

 

 

 

 

 

 

<요약> 

RANK() : 동일한 값이면 중복 순위를 부여, 다음 순위는 해당 갯수만큼 건너뛰고 반환

DENSE_RANK() : 동일한 값이면 중복 순위를 부여, 다음 순위는 중복 순위와 상관 없이 순차적으로 반환

ROW_NUMBER : 중복에 관계 없이 순차적으로 순위를 반환  

 

 

 

 

ROW_NUMBER() PARTITION BY (COL1) ORDER BY (COL2) 

 

 

파티션 별로 순위를 매기는 방법 : 부서별로 월급이 높은 순으로 출력을 하는 방법 

 

 

 

RANK() OVER (PARTITION BY COL1 ORDER BY COL2)

중복된 SALARY인 경우 동일한 등수를 매기며 해당 갯수만큼 점프!

 

 

DENSE_RANK() OVER (PARTITION BY COL1 ORDER BY COL2)

중복된 SALARY인 경우 동일한 등수 점프 없음!

 

ROW_NUMBER() OVER (                        ) AS ALIAS

RANK() OVER (                        ) AS ALIAS

DENSE_RANK() OVER (                        ) AS ALIAS

 

꼴이며, OVER 안에서 칼럼을 기준으로 정렬을 하면된다. 

특정 부서별, 그룹별 지정을 주려면 PARTITION을 사용해야 한다.

 

 

정리하면, 

RANK() OVER( ) 의 경우 중복된 값에는 동일한 순위를 부여하며 그 다음 순위는 해당 갯수 만큼 더한 후의 순위 

DENSE_RANK() OVER( ) 의 경우 중복된 값에는 동일한 순위를 부여하고 그 다음 순위는 더할 필요 없음

ROW_NUMBER() OVER( ) 의 경우 그냥 순위 매겨 버림. 차례대로!!!!!

 

 

'데이터베이스' 카테고리의 다른 글

[SQL] Weather Observation Station 18  (0) 2021.02.18
[SQL] PIVOT  (0) 2021.02.16
[SQL] 1주차 숙제  (0) 2021.02.05
[SQLP] 'DECODE' 의 모든 것  (0) 2020.06.20
[SQLP] DML 실행 순서  (0) 2020.06.20