다음 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
| 의사명 | 외래 | 입원 |
|---|---|---|
| 도윤 | 0 | 200 |
| 서진 | 50 | (null) |
| 윤하 | 140 | (null) |
| 윤하 | 0 | 300 |
2
| 의사명 | 외래 | 입원 |
|---|---|---|
| 도윤 | (null) | 200 |
| 서진 | 50 | (null) |
| 윤하 | 140 | (null) |
| 윤하 | (null) | 300 |
3
| 의사명 | 외래 | 입원 |
|---|---|---|
| 도윤 | 0 | 200 |
| 서진 | 50 | (null) |
| 윤하 | 140 | 300 |
4
| 의사명 | 외래 | 입원 |
|---|---|---|
| 도윤 | 0 | 200 |
| 서진 | 50 | 0 |
| 윤하 | 140 | 0 |
| 윤하 | 0 | 300 |
해설
GROUP BY 에 피벗 대상 열 구분까지 넣었으므로 의사별 한 행으로 모이지 않고 (의사명, 구분) 조합마다 한 행이 나와 윤하가 두 행으로 나뉜다.
각 행에서 외래 열은 ELSE 0 이라 해당 값이 없으면 0, 입원 열은 ELSE 가 없어 NULL 이 된다.
- 3행 결과는 GROUP BY 를 의사명만으로 한 올바른 피벗이다.
- 입원 칸이 0 인 결과는 ELSE 없는 CASE 의 SUM 을 0 으로 본 것이다.
- 외래 칸이 NULL 인 결과는 ELSE 0 의 효과를 놓친 것이다.
오류나 개정된 내용이 보이면 알려주세요