Oracle(12c 이상)에서 매출 상위 3개 지점을 구하려 한다. 매… | [SQLD] SQL 개발자 기출유형 모의고사 3회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 3회
Oracle(12c 이상)에서 매출 상위 3개 지점을 구하려 한다. 매출에 NULL 과 동점이 없을 때, 의도한 결과를 보장하지 않는 SQL은?㉠ SELECT 지점명, 매출 FROM (SELECT 지점명, 매출 FROM 지점 ORDER BY 매출 DESC) WHERE ROWNUM <= 3; ㉡ SELECT 지점명, 매출 FROM 지점 WHERE ROWNUM <= 3 ORDER BY 매출 DESC; ㉢ SELECT 지점명, 매출 FROM 지점 ORDER BY 매출 DESC FETCH FIRST 3 ROWS ONLY; ㉣ SELECT 지점명, 매출 FROM (SELECT 지점명, 매출, ROW_NUMBER() OVER (ORDER BY 매출 DESC) AS RN FROM 지점) WHERE RN <= 3;
1
㉠
2
㉣
3
㉢
4
㉡
해설
ROWNUM 은 WHERE 단계에서 행을 읽는 순서대로 붙고 ORDER BY 는 그 뒤에 실행되므로, ㉡은 먼저 걸러진 임의의 3행을 정렬할 뿐이다.
상위 N 개를 정확히 얻으려면 정렬을 인라인 뷰 안에서 끝낸 뒤 바깥에서 ROWNUM 을 걸어야 한다.
- ㉠은 인라인 뷰에서 먼저 정렬한 뒤 ROWNUM 으로 자르므로 올바르다.
- ㉢의 FETCH FIRST 는 ORDER BY 이후에 적용되는 12c 이상 표준 구문이다.
- ㉣은 ROW_NUMBER 로 순번을 매긴 뒤 바깥에서 3 이하만 고르므로 올바르다.
오류나 개정된 내용이 보이면 알려주세요