동점 처리 비교

같은 정렬을 봐도, 동점에서 번호 규칙이 갈라집니다

세 함수는 먼저 같은 행 집합을 같은 순서로 읽습니다. 차이는 동점 행에 같은 번호를 줄지, 그리고 그 뒤 다음 번호를 건너뛸지에서 생깁니다.

PARTITION BY department

부서별로 따로 계산하므로, 부서가 바뀌면 순위는 다시 1부터 시작합니다.

ORDER BY salary DESC

각 부서 안에서는 급여가 높은 행부터 순서를 정한 뒤 번호를 붙입니다.

한 부서 안에서 먼저 보는 순서는 100 → 90 → 90 → 80으로 동일합니다. 분기는 두 개의 90을 만나는 순간에 시작됩니다.

100 가장 높은 값
90 동점 1
같은
급여
90 동점 2
80 다음 값
비교 포인트 ROW_NUMBER 행마다 고유 번호를 강제로 부여 RANK 동점은 같은 순위, 다음 순위는 건너뜀 DENSE_RANK 동점은 같은 순위, 다음 순위도 이어서 부여
90, 90 처리
2 3

두 행을 서로 다른 위치로 취급하므로 번호가 계속 증가합니다.

2 2

동점이므로 둘 다 2위입니다. 같은 순위를 공유합니다.

2 2

동점 처리 자체는 RANK와 같습니다. 여기까지는 결과가 같습니다.

다음 80
4

앞에서 1, 2, 3을 이미 썼기 때문에 다음 값은 4가 됩니다.

4

2위가 두 행을 차지했으므로 3위를 비우고 4위로 점프합니다.

3

중복 순위를 한 번만 센다고 보고, 빈 번호 없이 바로 3위가 됩니다.

읽는 목적

행마다 유일한 번호가 필요할 때 적합합니다. 중복이 있어도 순번은 겹치지 않습니다.

공동 순위와 순위 공백을 그대로 보여주고 싶을 때 적합합니다. 대회 순위처럼 읽힙니다.

공동 순위는 유지하되, 뒤 번호는 촘촘하게 이어가고 싶을 때 적합합니다.

PARTITION BY

이 비교는 한 부서 안에서만 본 결과입니다. 다음 부서로 넘어가면 세 함수 모두 이전 번호를 이어가지 않고 다시 시작하므로, 앞 부서에서 4가 나와도 다음 부서 첫 행은 다시 1입니다.