연체일 1일당 연체료 100원이며, 연체일이 NULL 인 회원도 연체료… | [SQLD] SQL 개발자 기출유형 모의고사 5회 상세 페이지
1[SQLD] SQL 개발자 기출유형 모의고사 5회
연체일 1일당 연체료 100원이며, 연체일이 NULL 인 회원도 연체료가 0 으로 나오도록 하려 한다. 다음 결과를 얻기 위해 ( ㉠ )에 들어갈 식으로 옳은 것은?[회원]
| 회원번호 | 이름 | 연체일 |
|---|---|---|
| M1 | 윤채원 | 3 |
| M2 | 석도하 | (null) |
| M3 | 편예린 | 0 |
| M4 | 진우현 | 10 |
| M5 | 고아라 | (null) |
SELECT 회원번호, ( ㉠ ) AS 연체료 FROM 회원 ORDER BY 회원번호;
[원하는 결과]
| 회원번호 | 연체료 |
|---|---|
| M1 | 300 |
| M2 | 0 |
| M3 | 0 |
| M4 | 1000 |
| M5 | 0 |
1
NULLIF(연체일, 0) * 100
2
COALESCE(연체일 * 100, NULL)
3
COALESCE(연체일, 0) * 100
4
CASE WHEN 연체일 IS NULL THEN 0 END * 100
해설
COALESCE(연체일, 0)이 NULL 을 0 으로 바꾼 뒤 100 을 곱하므로 M2·M5 는 0, 나머지는 300·0·1000 이 되어 원하는 결과와 같다.NULL 에 곱셈을 먼저 하면 NULL 이 전파되므로 NULL 치환은 연산 전에 해야 한다.
- NULLIF 는 0 인 M3 까지 NULL 로 만들어 연체료가 비게 된다.
- 대체값이 NULL 인 COALESCE 는 NULL 행을 그대로 NULL 로 둔다.
- ELSE 없는 CASE 는 연체일이 있는 행을 NULL 로 만든다.
오류나 개정된 내용이 보이면 알려주세요