다음 SQL 의 실행 결과로 옳은 것은?[청구]청구번호고객번호금액1K1… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지

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

[청구]

청구번호고객번호금액
1K1100
2K150
3K2200
4K3(null)
5K330
6K220
SELECT 고객번호, SUM(금액) AS 합계,
       COUNT(*) OVER () AS 고객수,
       SUM(SUM(금액)) OVER () AS 전체
  FROM 청구
 GROUP BY 고객번호
 ORDER BY 고객번호;
1
고객번호합계고객수전체
K11506400
K22206400
K3306400
2
고객번호합계고객수전체
K11503400
K22203400
K3303400
3
고객번호합계고객수전체
K11503150
K22203370
K3303400
4
고객번호합계고객수전체
K11503(null)
K22203(null)
K3(null)3(null)
해설

윈도우 함수는 GROUP BY 가 끝난 뒤 그룹 결과 3행 위에서 계산되므로, 행 수는 고객 수인 3행이고 COUNT(*) OVER () 도 3이다.

SUM(SUM(금액)) OVER () 는 고객별 합계 150·220·30을 모두 더한 400을 각 행에 붙이며, K3 합계는 NULL 을 뺀 30이다.

  • 고객수를 6으로 쓴 표는 윈도우 함수가 원본 행에 적용된다고 본 오해이다.
  • K3 와 전체를 NULL 로 쓴 표는 집계 함수가 NULL 을 무시한다는 점을 놓쳤다.
  • 전체를 누적 값으로 쓴 표는 ORDER BY 가 없는 OVER () 를 누적 프레임으로 본 것이다.

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

이어서 풀어보기

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