다음 SQL 의 실행 결과로 옳은 것은?[청구]청구번호청구액지급액101… | [SQLD] SQL 개발자 기출유형 모의고사 10회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 10회
다음 SQL 의 실행 결과로 옳은 것은?[청구]
| 청구번호 | 청구액 | 지급액 |
|---|---|---|
| 101 | 500 | 450 |
| 102 | 300 | 0 |
| 103 | 200 | (null) |
| 104 | (null) | 0 |
| 105 | 150 | 150 |
SELECT 청구번호,
COALESCE(NULLIF(지급액, 0), 청구액) AS 기준액,
CASE WHEN 지급액 > 0 THEN '지급'
WHEN 지급액 = 0 THEN '부지급'
ELSE '심사중' END AS 상태
FROM 청구
ORDER BY 청구번호;1
| 청구번호 | 기준액 | 상태 |
|---|---|---|
| 101 | 450 | 지급 |
| 102 | 300 | 부지급 |
| 103 | 200 | 심사중 |
| 104 | (null) | 부지급 |
| 105 | 150 | 지급 |
2
| 청구번호 | 기준액 | 상태 |
|---|---|---|
| 101 | 450 | 지급 |
| 102 | 300 | 부지급 |
| 103 | 200 | 부지급 |
| 104 | (null) | 부지급 |
| 105 | 150 | 지급 |
3
| 청구번호 | 기준액 | 상태 |
|---|---|---|
| 101 | 450 | 지급 |
| 102 | 300 | 부지급 |
| 103 | 200 | 심사중 |
| 104 | 0 | 부지급 |
| 105 | 150 | 지급 |
4
| 청구번호 | 기준액 | 상태 |
|---|---|---|
| 101 | 450 | 지급 |
| 102 | 0 | 부지급 |
| 103 | 200 | 심사중 |
| 104 | (null) | 부지급 |
| 105 | 150 | 지급 |
해설
NULLIF(지급액, 0)은 0을 NULL 로 바꾸므로 102·104는 청구액으로 넘어가 102는 300, 청구액도 NULL 인 104는 COALESCE 결과가 NULL 이다.
103의 지급액 NULL 은 두 WHEN 비교가 모두 UNKNOWN 이라 ELSE 의 심사중이 되고, 104는 지급액이 0이라 부지급이다.
- 102 기준액이 0인 표는 NULLIF 변환을 빠뜨렸다.
- 103이 부지급인 표는 NULL 을 0처럼 비교했다.
- 104 기준액이 0인 표는 모든 인수가 NULL 인 COALESCE 를 0으로 보았다.
오류나 개정된 내용이 보이면 알려주세요