다음 SQL 의 실행 결과로 옳은 것은?[출고]출고번호창고수량상태1A5… | [SQLD] SQL 개발자 기출유형 모의고사 8회 상세 페이지

1[SQLD] SQL 개발자 기출유형 모의고사 8회
다음 SQL 의 실행 결과로 옳은 것은?

[출고]

출고번호창고수량상태
1A50완료
2A70취소
3A40완료
4A30완료
5B60완료
6B20완료
7B45취소
SELECT 창고, 출고번호, 수량, RN
  FROM (SELECT 창고, 출고번호, 수량, 상태,
               ROW_NUMBER() OVER (PARTITION BY 창고
                                  ORDER BY 수량 DESC) AS RN
          FROM 출고) T
 WHERE RN <= 2
   AND 상태 = '완료'
 ORDER BY 창고, RN;
1
창고출고번호수량RN
A1502
B5601
2
창고출고번호수량RN
A1501
B5601
3
창고출고번호수량RN
A2701
A1502
B5601
B7452
4
창고출고번호수량RN
A1501
A3402
B5601
B6202
해설

ROW_NUMBER 는 인라인 뷰에서 취소 건까지 포함한 모든 행에 먼저 번호를 매기고, 바깥 WHERE 는 그 번호를 바꾸지 않고 행만 걸러낸다.

A 는 70(취소)이 RN 1, 50 이 RN 2 라 50 만 남고, B 는 60 이 RN 1, 45(취소)가 RN 2 라 60 만 남아 2행이다.

  • 창고마다 완료 건 2행씩 나온 결과는 상태 조건을 인라인 뷰 안에 둔 경우이다.
  • 취소 건이 포함된 결과는 상태 조건을 빼고 상위 2행을 고른 경우이다.
  • A 의 RN 이 1 인 결과는 바깥 필터 뒤에 번호가 다시 매겨진다고 본 경우이다.

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

이어서 풀어보기

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