Today I Learned/SQL

[데린이의 TIL] SQL로 결측값 처리하기, COALESCE와 IFNULL에 대해 알아보자!

듀랑이 2020. 12. 28. 15:27

결측값 처리하기: COALESCE와 IFNULL

💡 NULL값이 들어있는 경우, 두 컬럼의 값으로 연산을 하고 싶다면 어떻게 해야할까?

예시 1: 결측치를 포함하는 컬럼으로 연산을 해야할 때

구매번호, 매출금액, 쿠폰금액의 정보를 담고 있는 테이블이 있다. 이 때, 순매출을 구하려면 매출금액에서 쿠폰금액을 빼야 한다. COUPON 컬럼의 null값을 처리해줄 때, COALESCE 함수를 쓸 수 있다.

SELECT *,
	   amount - coupon AS after_discount1,
	   amount - COALESCE(coupon, 0) AS after_discount2
FROM purchase

COALESCE(컬럼명, 대체값) 형태로 써서 연산을 진행해주었더니 아래와 같은 결과물이 나왔다.

그냥 연산을 하면, NULL값을 포함하는 행의 경우 NULL을 반환하지만, 0으로 대체해주면 우리가 원하는 순매출을 구할 수 있는 것!

 

예시 2: 결측치를 포함하는 컬럼값을 대체하여 표현할 때

프로그래머스 "NULL 처리하기" 문제에서는 아래 테이블에서 동물의 종, 이름, 보호소 들어올 때의 성별을 가져오는 쿼리를 짜야한다. 여기서 주의할 점은, 이름이 없는 NULL 값을 "No name"으로 표기해야한다.

출처: 프로그래머스 SQL 고득점 키트

COALESCE와 IFNULL을 SELECT와 함께 써서, 이름이 없는 동물의 경우 "No name"으로 출력되도록 했다.

아래 두 코드 모드 동작함!

-- COALESCE 사용
SELECT animal_type, COALESCE(name, 'No name'), sex_upon_intake
FROM animal_ins
ORDER BY animal_id

-- IFNULL 사용
SELECT animal_type, IFNULL(name,'No name') AS Name, sex_upon_intake
FROM animal_ins
ORDER BY animal_id

 

참고로 MySQL에서는 IFNULL을, PostgreSQL에서는 COALESCE를 활용하면 된다고 한다.

MySQL만 쓰다가 PostgreSQL을 배우고 있는데 아직 갈 길이 멀구만....