Oracle 에서 다음 SQL 의 실행 결과로 옳은 것은?[청구]청구번… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
Oracle 에서 다음 SQL 의 실행 결과로 옳은 것은?[청구]
| 청구번호 | 고객 | 유형 | 금액 |
|---|---|---|---|
| 1 | 정민 | 입원 | 300 |
| 2 | 정민 | 통원 | 40 |
| 3 | 하늘 | 통원 | 60 |
| 4 | 정민 | 통원 | 20 |
SELECT *
FROM 청구
PIVOT (SUM(금액) FOR 유형 IN ('입원' AS 입원, '통원' AS 통원))
ORDER BY 청구번호;1
| 청구번호 | 고객 | 유형 | 입원 | 통원 |
|---|---|---|---|---|
| 1 | 정민 | 입원 | 300 | (null) |
| 2 | 정민 | 통원 | (null) | 40 |
| 3 | 하늘 | 통원 | (null) | 60 |
| 4 | 정민 | 통원 | (null) | 20 |
2
| 청구번호 | 고객 | 입원 | 통원 |
|---|---|---|---|
| 1 | 정민 | 300 | (null) |
| 2 | 정민 | (null) | 40 |
| 3 | 하늘 | (null) | 60 |
| 4 | 정민 | (null) | 20 |
3
| 고객 | 입원 | 통원 |
|---|---|---|
| 정민 | 300 | 60 |
| 하늘 | (null) | 60 |
4
| 청구번호 | 고객 | 입원 | 통원 |
|---|---|---|---|
| 1 | 정민 | 300 | 0 |
| 2 | 정민 | 0 | 40 |
| 3 | 하늘 | 0 | 60 |
| 4 | 정민 | 0 | 20 |
해설
PIVOT 은 집계 대상(금액)과 FOR 열(유형)을 뺀 나머지 모든 열로 암묵적 GROUP BY 하므로, 청구번호가 남아 있는 이 쿼리는 원본 4행이 그대로 4행이 된다.
각 행은 자기 유형 칸에만 금액이 들어가고 다른 칸은 NULL 이며, 고객별로 합치려면 인라인 뷰에서 청구번호를 빼고 PIVOT 해야 한다.
- 고객별 2행으로 합친 표는 청구번호가 그룹 기준이 된다는 점을 놓쳤다.
- 빈 칸을 0으로 쓴 표는 해당 값이 없을 때 SUM 이 NULL 을 돌려준다는 점을 놓쳤다.
- 유형 열이 남은 표는 FOR 절의 열이 결과 열로 바뀌며 사라진다는 점을 놓쳤다.
오류나 개정된 내용이 보이면 알려주세요