문제
다음 빈칸에 들어갈 함수로 옳은 것은?
| NAME | SALARY |
|---|---|
| Alice | 5000 |
| Bob | 7000 |
| Charlie | 3000 |
| David | 6000 |
| Smith | 7000 |
SQLSELECT NAME, SALARY, ________ OVER (ORDER BY SALARY DESC) AS RANKING FROM TAB1;
<결과>
| NAME | SALARY | RANKING |
|---|---|---|
| Bob | 7000 | 1 |
| Smith | 7000 | 1 |
| David | 6000 | 2 |
| Alice | 5000 | 3 |
| Charlie | 3000 | 4 |
① DENSE_RANK() ② RANK() ③ PERCENT_RANK() ④ ROW_NUMBER()
정답
1번
해설
정답: 1. 동점자에게 같은 순위를 부여하고 다음 순위를 건너뛰지 않으므로 DENSE_RANK()가 적절하다.
오답 풀이
- 1번: 1, 1, 2, 3, 4 형태로 순위가 부여되므로 옳다.
- 2번: RANK()라면 1, 1 다음 순위가 3이 된다.
- 3번: PERCENT_RANK()는 상대 순위를 0~1 사이 값으로 계산한다.
- 4번: ROW_NUMBER()는 동점자에게도 서로 다른 번호를 부여한다.
보충 개념 RANK는 동점 이후 순위를 건너뛰고, DENSE_RANK는 건너뛰지 않는다. ROW_NUMBER는 정렬 결과의 행 번호를 고유하게 부여한다.