학습용 기출·복원자료 분류 확인SQLD · 2023년 48회 SQL 기본 및 활용 · 43번
구형 Oracle 방식으로 정렬 후 상위 10건을 정확히 구하는 구조는?
1
ROWNUM <= 10을 먼저 적용한 뒤 같은 쿼리 블록에서 ORDER BY한다.
오답 이유같은 쿼리 블록에서 ROWNUM으로 먼저 제한하면 전체 정렬 결과가 아니라 임의로 고른 10행만 정렬될 수 있다. 따라서 1번 보기 ‘ROWNUM <= 10을 먼저 적용한 뒤 같은 쿼리 블록에서 ORDER BY한다.’의 적용 여부를 문제 조건과 대조해야 한다.
2
인라인 뷰 안에서 ORDER BY하고 바깥에서 ROWNUM <= 10을 적용한다.
정답 근거ROWNUM은 ORDER BY보다 먼저 부여될 수 있으므로 정렬을 인라인 뷰에서 끝낸 뒤 바깥에서 제한해야 한다. 제한을 먼저 걸면 전체 정렬 결과의 상위 10건이 아니다. 따라서 2번 보기 ‘인라인 뷰 안에서 ORDER BY하고 바깥에서 ROWNUM <= 10을 적용한다.’의 적용 여부를 문제 조건과 대조해야 한다.
3
ORDER BY 없이 ROWNUM = 10만 사용한다.
오답 이유ROWNUM=10은 1부터 순차 부여되는 특성 때문에 일반적인 Top-N 조건으로 사용할 수 없고 정렬도 보장하지 않는다. 따라서 3번 보기 ‘ORDER BY 없이 ROWNUM = 10만 사용한다.’의 적용 여부를 문제 조건과 대조해야 한다.
4
HAVING ROWNUM <= 10을 사용한다.
오답 이유HAVING은 그룹 필터 절이며 그룹화되지 않은 Top-N 행 제한을 위한 위치가 아니다. 따라서 4번 보기 ‘HAVING ROWNUM <= 10을 사용한다.’의 적용 여부를 문제 조건과 대조해야 한다.
ANSWER & EXPLANATION
정답 2번
핵심 판단은 2번 ‘인라인 뷰 안에서 ORDER BY하고 바깥에서 ROWNUM <= 10을 적용한다.’입니다. ROWNUM은 ORDER BY보다 먼저 부여될 수 있으므로 정렬을 인라인 뷰에서 끝낸 뒤 바깥에서 제한해야 한다. 제한을 먼저 걸면 전체 정렬 결과의 상위 10건이 아니다.