다음 SQL 의 실행 결과로 옳은 것은?[진료실적]의사명구분진료비윤하외… | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지

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

[진료실적]

의사명구분진료비
윤하외래100
윤하외래40
윤하입원300
서진외래50
도윤입원200
SELECT 의사명,
       SUM(CASE WHEN 구분 = '외래' THEN 진료비 ELSE 0 END) AS 외래,
       SUM(CASE WHEN 구분 = '입원' THEN 진료비 END) AS 입원
  FROM 진료실적
 GROUP BY 의사명, 구분
 ORDER BY 의사명, 구분;
1
의사명외래입원
도윤0200
서진50(null)
윤하140(null)
윤하0300
2
의사명외래입원
도윤(null)200
서진50(null)
윤하140(null)
윤하(null)300
3
의사명외래입원
도윤0200
서진50(null)
윤하140300
4
의사명외래입원
도윤0200
서진500
윤하1400
윤하0300
해설

GROUP BY 에 피벗 대상 열 구분까지 넣었으므로 의사별 한 행으로 모이지 않고 (의사명, 구분) 조합마다 한 행이 나와 윤하가 두 행으로 나뉜다.

각 행에서 외래 열은 ELSE 0 이라 해당 값이 없으면 0, 입원 열은 ELSE 가 없어 NULL 이 된다.

  • 3행 결과는 GROUP BY 를 의사명만으로 한 올바른 피벗이다.
  • 입원 칸이 0 인 결과는 ELSE 없는 CASE 의 SUM 을 0 으로 본 것이다.
  • 외래 칸이 NULL 인 결과는 ELSE 0 의 효과를 놓친 것이다.

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

이어서 풀어보기

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