[SQL] ROW_NUMBER, RANK, DENSE_RANK

이정연·2023년 3월 29일
0

Play Data

목록 보기
17/26

컬럼 순위 매기기

SQL에서 컬럼의 순위를 매길 때 사용하는 쿼리 함수가 있다.

바로 ROW_NUMBER, RANK, DENSE_RANK이다.

예시를 보며 각각의 차이를 이해해보자.

-- Active: 1680071901546@@127.0.0.1@4000@classicmodels
select  buyPrice,
ROW_NUMBER() over(ORDER BY `buyPrice`) rownumber,
rank() over(order by buyPrice) as ranking,
DENSE_RANK() over(ORDER BY `buyPrice`) denserank
from products

위 결과에서 주목할 부분은 바로 판매가가 33.3$인 부분이다.

23,24 열!!

동점 항목에 대해서 어떻게 처리하냐가 위 함수들의 차이점이다.

ROW_NUMBER

먼저 ROW_NUMBER는 동순위를 인정하지 않는다.

따라서, 같은 33.3$지만 23위와 24위로 분리했다.

RANK

RANK와 DENSE_RANK는 동순위를 인정하지만

RANK는 우리가 흔히 알고 있는 방식의 순위 결정 방식을 따른다.

25번째 열인 33.61를보면앞에동점가격33.3를 보면 앞에 동점 가격 33.3가 2개 있기 떄문에 밀려서 25위로 기록되어 있다.

DENSE_RANK

반면 DENSE_RANK는 33.3가몇개있든간에23위다음은24위이므로33.61가 몇개 있든간에 23위 다음은 24위이므로 33.61를 24위로 기록했다.

정리

ROW_NUMBER는 동순위 인정 X

RANK는 동순위 인정 & 순위가 불연속적(뒷순위 밀림)
⭐️ 우리가 흔히 아는 순위 매김 방식 ⭐️

DENSE_RANK는 동순위 인정 & 순위가 연속적

profile
0x68656C6C6F21

0개의 댓글