선택 기준

같은 정렬이라도, 동점을 어떻게 번호로 바꿀지 먼저 정합니다

세 함수는 모두 같은 정렬 결과를 읽습니다. 차이는 동점 행에도 고유 번호가 필요한지, 그리고 공동 순위 뒤 번호를 비워 둘지입니다.

공통 입력

정렬 결과: 100 > 90 = 90 > 80

여기서 판단해야 하는 것은 값이 아니라, 90과 90에 어떤 순번 규칙을 적용할지입니다.

질문 1

동점이어도 각 행에 서로 다른 번호가 꼭 필요할까?

결과 개수를 정확히 잘라야 하거나, 중복 제거처럼 행 단위 식별이 중요하면 여기서 결정됩니다.

질문 2

공동 순위를 인정한다면, 다음 번호를 건너뛸까?

경쟁 순위를 그대로 보여줄지, 아니면 등급처럼 빈 번호 없이 이어 붙일지를 고릅니다.

ROW_NUMBER()

질문 1: 예

동점이어도 행마다 고유 번호를 강제로 붙입니다.

1, 2, 3, 4

TOP-N, 페이지네이션, 한 행만 남기는 중복 제거처럼 결과 행 수를 통제할 때 적합합니다.

RANK()

질문 1: 아니오 + 질문 2: 예

공동 순위를 주고, 그만큼 다음 번호를 건너뜁니다.

1, 2, 2, 4

"공동 2등이면 3등은 없다" 같은 경쟁 순위를 그대로 보여줘야 할 때 맞습니다.

DENSE_RANK()

질문 1: 아니오 + 질문 2: 아니오

공동 순위를 주되, 번호는 비우지 않고 촘촘하게 이어갑니다.

1, 2, 2, 3

등급 구간, 카테고리 번호, 그룹 수 계산처럼 다음 번호가 자연스럽게 이어져야 할 때 유리합니다.

빠른 판단: 정확히 N행을 뽑아야 하면 ROW_NUMBER(), 공동 순위를 보여주되 빈 번호를 남기면 RANK(), 공동 순위를 주면서도 번호를 이어가면 DENSE_RANK()입니다.