문제를 푸는데 ‘주문 번호가 null인 경우 0으로 반환하라.’ 는 조건이 있었다.
나는 단순히 CASE WHEN
구문을 써서 풀었는데
SELECT
CASE WHEN o.order_id is null THEN 0
ELSE o.order_id END
FROM orders o;
coalesce
라는 더 간단한 함수가 있었다.
case when 구문으로 풀었던 문제를 coalesce를 이용해 풀면
SELECT coalesce(o.order_id, 0) as order_id
FROM orders o;
이렇게 훨씬 더 간단하게 코드를 작성할 수 있다.
COALESCE는 NULL이 아닌 첫 번째 value값을 반환하거나 NULL값이 있다면 두 번째 value값을 반환하는 함수다. 이 때 모든 value가 NULL인 경우에는 NULL을 반환한다.
✏️ MySQL 공식 문서 참고Returns the first non-NULL
value in the list, or NULL
if there are no non-NULL
values.
The return type of COALESCE()
is the aggregated type of the argument types.
mysql> SELECT COALESCE(NULL,1);
-> 1
mysql> SELECT COALESCE(NULL,NULL,NULL);
-> NULL
COALESCE(value1, value2)
value1 | value2 | return |
---|---|---|
A | 1 | A |
NULL | 1 | 1 |
NULL | NULL | NULL |
더 자세히 살펴보면
customer_name | order_date | order_id |
---|---|---|
nick | 2023.01.29 | 1 |
judy | 2022.12.04 | 2 |
gony | 2023.02.01 | NULL |
dana | 2023.01.30 | 3 |
이렇게 생긴 orders 테이블이 있을 때
select customer_name, order_date, coalesce(order_id,0)
from orders o;
위 코드를 실행하면
customer_name | order_date | order_id |
---|---|---|
nick | 2023.01.29 | 1 |
judy | 2022.12.04 | 2 |
gony | 2023.02.01 | 0 |
dana | 2023.01.30 | 3 |
NULL값이 0으로 바뀐 결과를 볼 수 있다.