같은 정렬을 봐도, 동점에서 번호 규칙이 갈라집니다
세 함수는 먼저 같은 행 집합을 같은 순서로 읽습니다. 차이는 동점 행에 같은 번호를 줄지, 그리고 그 뒤 다음 번호를 건너뛸지에서 생깁니다.
PARTITION BY department
부서별로 따로 계산하므로, 부서가 바뀌면 순위는 다시 1부터 시작합니다.
ORDER BY salary DESC
각 부서 안에서는 급여가 높은 행부터 순서를 정한 뒤 번호를 붙입니다.
공통 입력
한 부서 안에서 먼저 보는 순서는 100 → 90 → 90 → 80으로 동일합니다. 분기는 두 개의 90을 만나는 순간에 시작됩니다.
급여
| 비교 포인트 | ROW_NUMBER 행마다 고유 번호를 강제로 부여 | RANK 동점은 같은 순위, 다음 순위는 건너뜀 | DENSE_RANK 동점은 같은 순위, 다음 순위도 이어서 부여 |
|---|---|---|---|
| 90, 90 처리 |
2
3
두 행을 서로 다른 위치로 취급하므로 번호가 계속 증가합니다. |
2
2
동점이므로 둘 다 2위입니다. 같은 순위를 공유합니다. |
2
2
동점 처리 자체는 |
| 다음 80 |
4
앞에서 1, 2, 3을 이미 썼기 때문에 다음 값은 4가 됩니다. |
4
2위가 두 행을 차지했으므로 3위를 비우고 4위로 점프합니다. |
3
중복 순위를 한 번만 센다고 보고, 빈 번호 없이 바로 3위가 됩니다. |
| 읽는 목적 | 행마다 유일한 번호가 필요할 때 적합합니다. 중복이 있어도 순번은 겹치지 않습니다. |
공동 순위와 순위 공백을 그대로 보여주고 싶을 때 적합합니다. 대회 순위처럼 읽힙니다. |
공동 순위는 유지하되, 뒤 번호는 촘촘하게 이어가고 싶을 때 적합합니다. |
이 비교는 한 부서 안에서만 본 결과입니다. 다음 부서로 넘어가면 세 함수 모두 이전 번호를 이어가지 않고 다시 시작하므로, 앞 부서에서 4가 나와도 다음 부서 첫 행은 다시 1입니다.