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는 동순위를 인정하지 않는다.
따라서, 같은 33.3$지만 23위와 24위로 분리했다.
RANK와 DENSE_RANK는 동순위를 인정하지만
RANK는 우리가 흔히 알고 있는 방식의 순위 결정 방식을 따른다.
25번째 열인 33.61가 2개 있기 떄문에 밀려서 25위로 기록되어 있다.
반면 DENSE_RANK는 33.3를 24위로 기록했다.
ROW_NUMBER는 동순위 인정 X
RANK는 동순위 인정 & 순위가 불연속적(뒷순위 밀림)
⭐️ 우리가 흔히 아는 순위 매김 방식 ⭐️
DENSE_RANK는 동순위 인정 & 순위가 연속적