CodeGym /행동 /SQL SELF /NULLIF() 함수 — 문법이랑 사용 예시

NULLIF() 함수 — 문법이랑 사용 예시

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

이번엔 신비한 NULL을 다루는 또 다른 함수 NULLIF()에 대해 얘기해볼게. 이 함수는 특정 값을 NULL로 바꿔서 데이터 처리할 때 유용하게 써먹을 수 있어. 벨트 꽉 매고, 재밌는 여행 시작하자!

NULLIF() 함수는 PostgreSQL에서 진짜 쓸만한 도구야. 두 값을 비교해서 같으면 NULL을, 다르면 첫 번째 값을 돌려줘. 마치 "이 값들이 똑같으면 그냥 무시하자!"라고 말하는 것 같지.

함수의 간단한 문법은 이래:

NULLIF(value1, value2)

value1이랑 value2가 같으면 결과는 NULL이야. 다르면 결과는 value1이야.

예시:

SELECT NULLIF(10, 10); -- 결과: NULL
SELECT NULLIF(10, 20); -- 결과: 10
SELECT NULLIF('hello', 'hello'); -- 결과: NULL
SELECT NULLIF('hello', 'world'); -- 결과: 'hello'

쉽지? 이제 이 함수를 실제 문제에 어떻게 써먹는지 보자.

예시 1: 0으로 나누기 방지

0으로 나누기는 모든 개발자의 악몽이지. SQL에서 0으로 나누면 에러가 나와. 이럴 때 NULLIF()가 딱이야.

상황을 상상해봐: sales 테이블에 revenue(수익)랑 expenses(지출) 컬럼이 있어. 우리는 수익률(revenue / expenses)을 계산하고 싶은데, 가끔 지출이 0일 때가 있지. 그냥 쿼리 날리면 0으로 나누기 에러가 나버려.

sales 테이블:

revenue expenses
1000 200
1500 0
2000 250

잘못된 쿼리:

SELECT revenue / expenses AS profitability
FROM sales;
-- 에러: 0으로 나누기!

NULLIF()로 해결:

SELECT revenue / NULLIF(expenses, 0) AS profitability
FROM sales;

결과:

profitability
5.00
NULL
8.00

이제 expenses가 0이면 NULLIF(expenses, 0)NULL을 돌려주고, NULL로 나누면 에러 대신 NULL이 결과로 나와.

예시 2: 같은 값 NULL로 바꾸기

학생 데이터가 담긴 테이블이 있다고 해보자. first_name이랑 preferred_name 컬럼이 있어. 어떤 학생은 본명 그대로 쓰고, 어떤 학생은 별명을 쓰지. 만약 두 이름이 같으면 preferred_name을 굳이 보여줄 필요 없잖아.

students 테이블:

first_name preferred_name
John Johnny
Anna Anna
Alex Lex

NULLIF() 쿼리:

SELECT first_name,
       NULLIF(preferred_name, first_name) AS display_name
FROM students;

결과:

first_name display_name
John Johnny
Anna NULL
Alex Lex

preferred_name이랑 first_name이 같으면 결과가 NULL이야.

예시 3: 데이터 필터링

가끔 두 컬럼 값이 다를 때만 행을 뽑고 싶을 때가 있어. 예를 들어, 주문 테이블에 original_pricediscounted_price가 있는데, 할인된 주문만 찾고 싶을 때!

orders 테이블:

order_id original_price discounted_price
1 100 100
2 200 180
3 150 150

NULLIF() 쿼리:

SELECT order_id, original_price, discounted_price
FROM orders
WHERE NULLIF(original_price, discounted_price) IS NOT NULL;

결과:

order_id original_price discounted_price
2 200 180

할인된 주문만 결과에 나와.

NULLIF() 실전 케이스

케이스 1: 선택적 값 고르기

데이터 다룰 때, 여러 컬럼 중에서 특정 값을 제외하고 골라야 할 때가 있어. 예를 들어, 직원 리스트에 base_salarybonus가 있는데, 보너스가 0이면 999로 바꿔주고 싶을 때!

employees 테이블:

employee_id base_salary bonus
1 50000 10000
2 40000 0
3 60000 5000

NULLIF() 쿼리:

SELECT employee_id,
       base_salary + COALESCE(NULLIF(bonus, 0), 999) AS total_salary
FROM employees;

결과:

employee_id total_salary
1 60000
2 40999
3 65000

bonus가 0이면 999로 바뀌는 거지.

케이스 2: 행 개수 세기

NULLIF()를 써서 복잡한 필터 조건도 쉽게 만들 수 있어. 예를 들어, 사용자 테이블에서 전체 유저 수랑 guest가 아닌 등록 유저 수를 한 번에 세고 싶을 때!

SELECT
  COUNT(*) AS total_users,
  COUNT(NULLIF(status, 'guest')) AS registered_users
FROM users;

이렇게 NULLIF() 하나만으로 에러 방지부터 코드 가독성까지 여러 문제를 쉽게 해결할 수 있어. 이제 이 함수가 어떻게 동작하는지 아니까, PostgreSQL 데이터 다루는 실력 한 단계 업!

1
설문조사/퀴즈
NULL 다루기, 레벨 9, 레슨 4
사용 불가능
NULL 다루기
NULL 다루기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION