다음 SQL 의 실행 결과로 옳은 것은?[납입]계약번호회차납입액A011… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지

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

[납입]

계약번호회차납입액
A011100
A012(null)
A013100
B02150
B02270
SELECT 계약번호, 회차, 납입액,
       SUM(납입액) OVER (PARTITION BY 계약번호
                         ORDER BY 회차 DESC) AS 잔여합
  FROM 납입
 ORDER BY 계약번호, 회차;
1
계약번호회차납입액잔여합
A011100100
A012(null)100
A013100200
B0215050
B02270120
2
계약번호회차납입액잔여합
A011100200
A012(null)200
A013100200
B02150120
B02270120
3
계약번호회차납입액잔여합
A011100(null)
A012(null)(null)
A013100100
B02150120
B0227070
4
계약번호회차납입액잔여합
A011100200
A012(null)100
A013100100
B02150120
B0227070
해설

OVER 안의 ORDER BY 회차 DESC 때문에 누적은 계약별 마지막 회차부터 거꾸로 쌓이고, 출력 순서는 바깥 ORDER BY 에 따라 회차 오름차순이 된다.

A01은 3회차 100, 2회차는 NULL 을 건너뛴 누적이라 100, 1회차 200이며 B02는 2회차 70, 1회차 120이다.

  • 1회차부터 쌓은 표는 OVER 의 정렬 방향을 바깥 정렬과 같다고 본 것이다.
  • NULL 이후를 NULL 로 쓴 표는 SUM 이 NULL 을 건너뛴다는 점을 놓쳤다.
  • 계약별 총합을 모든 행에 쓴 표는 OVER 안의 ORDER BY 를 무시한 결과이다.

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

이어서 풀어보기

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