SQL 순위 함수 정리 – 'RANK(), DENSE_RANK(), ROW_NUMBER(), NTILE(n)'

박우진·2025년 5월 21일

SQLD

목록 보기
6/12

SQL에서 순위를 매길 때는 주로 윈도우 함수(Window Function)를 사용합니다. 이 글에서는 순위를 계산하는 대표적인 함수들인 RANK(), DENSE_RANK(), ROW_NUMBER(), NTILE()에 대해 개념, 작동 방식, 차이점 등을 정리합니다.


1. RANK()

개념

같은 값에는 같은 순위를 부여하고, 다음 순위는 중복 개수만큼 건너뜀 (순위의 간격 존재).

예시

SELECT 이름, 점수,
       RANK() OVER (ORDER BY 점수 DESC) AS 순위
FROM 성적표;
이름점수순위
A1001
B1001
C903
D804

B와 A가 공동 1등 → 다음 순위는 3등


2. DENSE_RANK()

개념

RANK()와 유사하지만, 중간 순위가 건너뛰지 않음 (순위의 간격 없음).

예시

SELECT 이름, 점수,
       DENSE_RANK() OVER (ORDER BY 점수 DESC) AS 순위
FROM 성적표;
이름점수순위
A1001
B1001
C902
D803

공동 순위 이후에도 바로 다음 등수 부여


3. ROW_NUMBER()

개념

중복 없이 고유한 순위를 부여 (정렬 기준이 같아도 고유 번호를 매김).
정렬된 순서에 따라 1부터 순차적으로 증가.

예시

SELECT 이름, 점수,
       ROW_NUMBER() OVER (ORDER BY 점수 DESC) AS 순위
FROM 성적표;
이름점수순위
A1001
B1002
C903
D804

절대 중복 없는 일련번호로 순위를 매길 때 사용


4. NTILE(n)

개념

지정한 n개의 그룹으로 데이터를 균등하게 분할해 그룹 번호를 부여합니다.
순위가 아니라 분위 개념에 가깝습니다.

예시

SELECT 이름, 점수,
       NTILE(2) OVER (ORDER BY 점수 DESC) AS 분위
FROM 성적표;
이름점수분위
A1001
B901
C802
D702

전체를 2개 그룹으로 나눠 각자 번호 부여


비교 요약

함수순위 중복순위 건너뜀고유 순위분위 분할주 사용 목적
RANK()OO공동 순위 포함 등수 매김
DENSE_RANK()O연속적인 순위 매김
ROW_NUMBER()O고유 번호/순번 부여
NTILE(n)On등분 그룹화

사용 요약

  • 공동 순위 필요 + 실제 등수처럼 표현RANK()
  • 공동 순위는 필요하지만, 건너뛰지 않는 순위DENSE_RANK()
  • 정렬된 고유 번호 필요 (중복 제거 포함)ROW_NUMBER()
  • 전체 데이터를 n개의 분위로 나눌 때NTILE(n)

0개의 댓글