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 이하만 고르므로 올바르다.

오류나 개정된 내용이 보이면 알려주세요

이어서 풀어보기

[SQLD] SQL 개발자 기출유형 모의고사 3회 50문항 이어서 보기문제·정답·해설을 한 페이지에서 이어서 볼 수 있어요SQLD SQL 개발자 실전 모의고사 암기장 전체 보기