문제
RANK() 함수와 DENSE_RANK() 함수의 결과 차이로 올바른 것은? (데이터는 100, 100, 200 이며 오름차순 기준이다.)
① RANK: 1, 1, 3 / DENSE_RANK: 1, 1, 2 ② RANK: 1, 2, 3 / DENSE_RANK: 1, 1, 2 ③ RANK: 1, 1, 2 / DENSE_RANK: 1, 2, 3 ④ 두 함수의 결과는 동일하다.
정답
1번
해설
정답: 1. 오름차순 정렬 시 동점인 100·100 이 공동 1위가 되고, 200 이 그 뒤 순위가 된다. RANK 는 공동 순위 뒤에 건너뛴 순위를 적용하고, DENSE_RANK 는 건너뛰지 않는다.
오답 풀이
- ①: 정답. 동점 두 행이 1,1 을 받고, RANK 는 다음 순위가 3(2를 건너뜀), DENSE_RANK 는 2 가 된다.
- ②: 동점인데도 RANK 가 1,2,3 으로 다른 순위를 준 것은 틀렸다(동점은 같은 순위).
- ③: RANK 결과 1,1,2 는 건너뛰기를 안 한 것이라 RANK 의 동작과 어긋난다.
- ④: 동점이 있을 때 RANK 와 DENSE_RANK 는 후순위 처리가 달라 결과가 같지 않다.
보충 개념 RANK 는 동순위 다음에 '건너뛴' 순위를 부여하여 순위에 공백이 생긴다(1,1,3). DENSE_RANK 는 공백 없이 다음 순위를 연속으로 부여한다(1,1,2). ROW_NUMBER 는 동점이라도 유일한 일련번호(1,2,3)를 매긴다.