감면액이 NULL이면 감면이 없는 것으로 보고 청구액을 구하려 한다. … | [SQLD] SQL 개발자 기출유형 모의고사 6회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 6회
감면액이 NULL이면 감면이 없는 것으로 보고 청구액을 구하려 한다. 다음 결과를 얻기 위해 ( ㉠ )에 들어갈 식으로 옳은 것은?[수납]
| 수납번호 | 진료비 | 감면액 |
|---|---|---|
| 1 | 12000 | 2000 |
| 2 | 8000 | (null) |
| 3 | 15000 | 0 |
| 4 | 5000 | 5000 |
| 5 | 9000 | (null) |
SELECT 수납번호, 진료비 - ( ㉠ ) AS 청구액 FROM 수납 ORDER BY 수납번호;
[원하는 결과]
| 수납번호 | 청구액 |
|---|---|
| 1 | 10000 |
| 2 | 8000 |
| 3 | 15000 |
| 4 | 0 |
| 5 | 9000 |
1
COALESCE(감면액, 0)
2
SUM(감면액)
3
CASE 감면액 WHEN NULL THEN 0 END
4
NULLIF(감면액, 0)
해설
COALESCE(감면액, 0) 은 감면액이 NULL 이면 0 을 돌려주므로 수납 2·5는 진료비 전액이 청구액이 되고 나머지는 감면액을 뺀 값이 나온다.
NULL 을 그대로 빼면 NULL 전파로 청구액이 NULL 이 되므로 대체값 처리가 필요하다.
- NULLIF 는 0 을 NULL 로 바꿔 수납 2·3·5 의 청구액이 NULL 이 된다.
- SUM 은 집계 함수라 GROUP BY 없이 일반 열과 함께 쓰면 오류가 난다.
- 단순 CASE 의 WHEN NULL 은 어떤 행과도 일치하지 않아 모든 청구액이 NULL 이 된다.
오류나 개정된 내용이 보이면 알려주세요