CodeGym /행동 /SQL SELF /COALESCE()로 NULL 처리하기

COALESCE()로 NULL 처리하기

SQL SELF
레벨 9, 레슨 3
사용 가능

오늘은 다시 NULL 처리 주제로 좀 더 깊게 들어가보고, 진짜 유용한 함수인 COALESCE()를 소개할게. 이 함수 덕분에 NULL 값이 있는 데이터도 깔끔하게 다룰 수 있어.

예를 들어보자: 직원 데이터가 담긴 테이블이 있는데, 몇몇 직원은 월급 정보가 없어. 만약 모든 월급을 올려주려고 하면 어떻게 될까? 별로 좋은 결과 안 나와. NULL이랑 연산하면 아무것도 못하거든. 그럼 NULL 월급을 0으로 바꾸고 싶으면? 바로 여기서 COALESCE()가 등장하지!

COALESCE()는 넘겨준 값들 중에서 첫 번째로 NULL이 아닌 값을 반환하는 함수야. 만약 모든 값이 NULL이면 그냥 NULL을 돌려줘. 쉽게 말해서, "제일 먼저 쓸만한 값 하나만 줘!" 이런 느낌이지.

문법

COALESCE(value1, value2, ..., value_n)

value1, value2, ..., value_n은 함수에 넘기는 값들이야. 이 중에서 NULL이 아닌 첫 번째 값을 반환해.

COALESCE() 사용 예제

예시 몇 개 보여줄게.

예제 1: NULL을 0으로 바꾸기

예를 들어, salaries 테이블이 있다고 해보자:

id name salary
1 Otto 50000
2 Maria NULL
3 Alex 60000
4 Anna NULL

전체 월급 합계를 구하고 싶으면 이렇게 하면 돼:

SELECT SUM(salary) AS total_salary
FROM salaries;

SUM() 함수는 NULL을 무시하니까 문제 없어.

근데 모든 직원한테 1000 보너스를 더해서 합계를 구하고 싶으면?

SELECT SUM(salary+1000) AS total_salary
FROM salaries;

이러면 결과가 이상해져. 그래서 COALESCE로 NULL을 0으로 바꿔주는 게 훨씬 좋아. 이렇게 해보자:

SELECT SUM(COALESCE(salary, 0)) AS total_salary
FROM salaries;

결과:

total_salary
110000

이렇게 하면 훨씬 안전하고 확실하지.

예제 2: NULL을 기본값으로 바꾸기

이번엔 students 테이블에 이름이랑 주소가 있다고 해보자:

id name address
1 Anna Kanne
2 Peter NULL
3 Lisa Painful
4 Alex NULL

주소가 NULL이면 "입력 안 됨"으로 바꿔주고 싶으면 이렇게 해:

SELECT name, COALESCE(address, '입력 안 됨') AS resolved_address
FROM students;

쿼리 결과:

name resolved_address
Anna Kanne
Peter 입력 안 됨
Lisa Painful
Alex 입력 안 됨

예제 3: 여러 값 중에서 선택하기

가끔 NULL을 한 값이 아니라 여러 후보 중에서 바꿔야 할 때도 있어. 예를 들어, 이름, 별명, 아니면 "이름 없음" 중에서 하나를 보여주고 싶을 때. users 테이블:

user_id first_name short_name full_name
1 John Jonny Johnny Walker
2 NULL Pete Peter Kamen
3 NULL NULL

쿼리:

SELECT user_id,
       COALESCE(first_name, short_name, '이름 없음') AS display_name
FROM users;

결과:

user_id display_name
1 John
2 Pete
3 이름 없음

COALESCE() 실전 활용

실제로 COALESCE()는 데이터가 완벽하지 않을 때 진짜 구세주야.

어떤 상황에서 도움이 되는지 볼까?

예제 1: 텍스트 필드 값 바꾸기

원본 customers 테이블:

id name address
1 Alex Lin 123 Maple St
2 Maria Chi NULL
3 Anna Song 456 Oak Ave
4 Otto Art NULL
5 Liam Park 789 Pine Rd

쿼리:

SELECT name, COALESCE(address, '입력 안 됨') AS address
FROM customers;

결과:

name address
Alex Lin 123 Maple St
Maria Chi 입력 안 됨
Anna Song 456 Oak Ave
Otto Art 입력 안 됨
Liam Park 789 Pine Rd

예제 2: 리포트용 데이터 준비

원본 sales 테이블:

id product price
1 Widget A 100
2 Widget B NULL
3 Widget C 250
4 Widget D NULL
5 Widget E 300

쿼리:

SELECT SUM(COALESCE(price, 0)) AS total_sales
FROM sales;

결과:

total_sales
650

COALESCE() 쓸 때 흔한 실수

COALESCE()가 간단하고 만능 같아 보여도, 몇 가지 주의할 점이 있어.

데이터 타입 안 맞음. COALESCE()에 넘기는 값들은 데이터 타입이 맞아야 해. 예를 들어, 문자열이랑 숫자를 섞으면 안 돼.

-- 에러
SELECT COALESCE(salary, '입력 안 됨') FROM employees; 
-- salary는 숫자 필드고, '입력 안 됨'은 텍스트야.

인자 순서 신경 안 씀. COALESCE()는 첫 번째로 NULL이 아닌 값을 반환하니까, 인자 순서가 진짜 중요해.

2
과제
SQL SELF, 레벨 9, 레슨 3
잠금
NULL 값 기본값으로 대체하기
NULL 값 기본값으로 대체하기
2
과제
SQL SELF, 레벨 9, 레슨 3
잠금
NULL 값 대체하기: 여러 단계의 우선순위
NULL 값 대체하기: 여러 단계의 우선순위
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION