[SQL] ROW_NUMBER, RANK, DENSE_RANK 언제 써야 할까?

Unit·2025년 5월 15일

SQL

목록 보기
14/59

순위를 매기는 쿼리,
어떤 함수를 써야 할지 헷갈렸던 적 있으신가요?

ROW_NUMBER, RANK, DENSE_RANK는 모두 순위를 구하지만
동점 처리 방식이 다릅니다.


✅ 예시 비교

SELECT name
	 , score
     , ROW_NUMBER() OVER (ORDER BY score DESC) AS row_num
     , RANK() OVER (ORDER BY score DESC) AS rank
     , DENSE_RANK() OVER (ORDER BY score DESC) AS dense_rank
FROM players;
namescorerow_numrankdense_rank
A100111
B100211
C90332

✅ 차이 요약

ROW_NUMBER()
→ 동점 상관없이 순서대로 번호 부여
→ 무조건 1, 2, 3, 4, ...

RANK()
→ 동점이면 같은 순위 / 다음 순위 건너뜀
→ 예: 1, 1, 3, 4, ...

DENSE_RANK()
→ 동점이면 같은 순위 / 순위 건너뛰지 않음
→ 예: 1, 1, 2, 3, ...


정리

✔️ 동점 처리 기준에 따라, 알맞은 함수를 선택하여 사용하세요.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글