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"으로 표기해야한다.
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을 배우고 있는데 아직 갈 길이 멀구만....