문제
다음 SQL에 대한 설명으로 가장 적절한 것은?
SQLSELECT * FROM ( SELECT ROW_NUMBER() OVER(ORDER BY 점수 DESC) AS RN, 이름, 점수 FROM 성적 ) WHERE RN <= 2 ORDER BY RN DESC;
<조건> 점수 상위 2명의 RN과 점수가 각각 RN=1, 점수=150 / RN=2, 점수=40이라고 할 때 최종 출력 순서는 어떻게 되는가?
① RN=1, 점수=150 다음 RN=2, 점수=40 ② RN=2, 점수=40 다음 RN=1, 점수=150 ③ 점수 오름차순으로 전체 데이터 출력 ④ RN 값과 무관하게 입력 순서대로 출력
정답
2번
해설
정답: 2. ROW_NUMBER는 점수 DESC 기준으로 번호를 부여하지만 최종 출력은 ORDER BY RN DESC에 따라 RN이 큰 행부터 출력된다.
오답 풀이
- 1번: RN 오름차순 출력일 때의 결과이다.
- 2번: 최종 ORDER BY RN DESC에 맞다.
- 3번: 전체 데이터가 아니라 RN <= 2인 행만 출력한다.
- 4번: 최종 ORDER BY가 있으므로 입력 순서대로 출력되지 않는다.
보충 개념 분석 함수의 ORDER BY와 최종 SELECT의 ORDER BY는 역할이 다르다. 분석 함수의 ORDER BY는 순번 산정 기준이고, 마지막 ORDER BY는 출력 순서 기준이다.