Oracle 기준으로 다음 SQL 의 실행 결과로 옳은 것은?[입원현황… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지

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

[입원현황]

입원번호병동등급
1A일반
2A일반
3A(null)
4B특실
5B일반
SELECT 병동, 등급, COUNT(*) AS 환자수,
       GROUPING(등급) AS G
  FROM 입원현황
 GROUP BY GROUPING SETS ((병동, 등급), (병동))
 ORDER BY 병동, G, 등급;
1
병동등급환자수G
A일반20
A(null)31
B일반10
B특실10
B(null)21
2
병동등급환자수G
A일반20
A(null)10
A(null)31
B일반10
B특실10
B(null)21
(null)(null)51
3
병동등급환자수G
A일반20
A(null)11
A(null)31
B일반10
B특실10
B(null)21
4
병동등급환자수G
A일반20
A(null)10
A(null)31
B일반10
B특실10
B(null)21
해설

GROUPING SETS ((병동, 등급), (병동)) 은 병동·등급별 상세와 병동별 소계만 만들고 총계는 만들지 않으며, GROUPING(등급) 은 집계로 생긴 NULL 에만 1 이다.

입원번호 3 의 등급은 원래 NULL 이라 A·NULL·1 은 G 가 0 인 상세 행이고, A·NULL·3 과 B·NULL·2 가 G 가 1 인 소계 행이다.

  • NULL 데이터 행의 G 를 1 로 본 결과는 원래 NULL 과 소계 NULL 을 구분하지 못한 것이다.
  • 총계 행이 있는 결과는 ()가 없는 GROUPING SETS 에 총계를 더한 것이다.
  • A·NULL·1 행이 빠진 결과는 NULL 등급이 그룹에서 빠진다고 오해한 것이다.

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

이어서 풀어보기

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