CodeGym /행동 /SQL SELF /실제 문제에서 NULL 다루기 예시: 계산, 필터링, 정렬

실제 문제에서 NULL 다루기 예시: 계산, 필터링, 정렬

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

NULL을 다루는 건 진짜 여러 상황에서 나와: 리포트에서 누락된 데이터 처리부터 필터링, 정렬까지. 만약 테이블에 값이 없을 때 9999 같은 이상한 숫자를 넣는 것과 NULL 중에 고르라면, 대부분 NULL을 고를 거야 — 맞아, 완전 편하진 않지만 그래도 솔직하잖아. 몇 가지 전형적인 케이스를 같이 보자.

예시: 가격이 없는 상품 정렬하기

우리가 인터넷 쇼핑몰을 운영한다고 해보자, 그리고 상품 테이블이 있어:

product_id name price
1 휴대폰 45000
2 노트북 NULL
3 카메라 25000
4 스마트워치 NULL

우리는 상품을 가격순으로 정렬하고 싶은데, 가격이 없는 상품(NULL)은 맨 뒤로 가야 해.

SELECT product_id, name, price
FROM products
ORDER BY price ASC NULLS LAST;

결과:

product_id name price
3 카메라 25000
1 휴대폰 45000
2 노트북 NULL
4 스마트워치 NULL

NULLS LAST라는 키워드에 주목해. PostgreSQL에서는 ASC 정렬 시 기본적으로 NULL이 맨 앞에 오는데, 이 옵션을 쓰면 맨 뒤로 보낼 수 있어.

예시: 생년월일이 없는 학생 필터링

학생 테이블이 있는데, 생년월일이 없는 학생만 뽑고 싶어.

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

쿼리:

SELECT student_id, name
FROM students
WHERE birth_date IS NULL;

결과:

student_id name
2 Anna Song
4 Maria Chi

생년월일이 없는 학생 정보를 잘 뽑아냈어.

NULL 처리 함수 사용 예시

예시: NULL을 고려한 최종 합계 계산

주문 테이블에 주문 금액이 저장되어 있는데, 데이터가 항상 다 채워져 있는 건 아니야. 이런 경우 합계 계산할 때 금액이 0으로 처리되게 해야 해.

데이터 예시:

order_id customer_name order_amount
1 Alex 1200
2 Maria 2500
3 Max NULL
4 Xena 3100

쿼리:

SELECT SUM(COALESCE(order_amount, 0)) AS total_amount
FROM orders;

결과:

total_amount
6800

COALESCE(order_amount, 0)를 써서 NULL을 0으로 바꾼 다음 합계를 내는 거야. 이렇게 하면 에러나 잘못된 계산을 막을 수 있어.

예시: NULL 대신 텍스트 출력하기

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

리포트에서 빈 데이터는 NULL 대신 "입력 안 됨"이라고 표시해야 해.

SELECT
    customer_name, 
    COALESCE(order_amount::TEXT, '입력 안 됨') AS order_status
FROM orders;

결과:

customer_name order_status
Alex 1200
Maria 2500
Max 입력 안 됨
Xena 3100

COALESCE()를 쓰면 NULL일 때 원하는 텍스트로 바꿔서 보여줄 수 있어.

NULL을 다루는 복잡한 시나리오

customer_name order_amount
Alex 1200
Maria 2500
Max NULL
Xena 3100

이번엔 주문 금액이 없는 주문이 맨 앞에 오고, 그 다음엔 금액이 큰 순서대로 정렬하고 싶어.

SELECT customer_name, order_amount
FROM orders
ORDER BY order_amount DESC NULLS FIRST;

결과:

customer_name order_amount
Max NULL
Xena 3100
Maria 2500
Alex 1200

여기서는 NULLS FIRST를 써서 NULL 값을 맨 앞에 오게 했어.

예시: NULL 값 대체해서 데이터 필터링

student_id name birth_date
1 Otto Art 2000-01-15
2 Anna Song NULL
3 Alex Lin 1999-05-10
4 Maria Chi NULL

어떤 리포트에서는 값이 있으면 그대로, 없으면 NULL 대신 "모름"이라고 표시해야 할 때가 있어.

SELECT
    student_id, 
    name, 
    COALESCE(birth_date::TEXT, '모름') AS birth_date_info
FROM students;

결과:

student_id name birth_date_info
1 Otto Art 2000-01-15
2 Anna Song 모름
3 Alex Lin 1999-05-10
4 Maria Chi 모름

이런 식으로 리포트에서 데이터가 없다는 걸 명확하게 보여줄 수 있어.

실전 팁

NULL을 다룰 땐 신경을 더 써야 해. 몇 가지 꿀팁 알려줄게:

  • IS NULL이랑 COALESCE()로 누락된 값 체크하고 대체해.
  • 집계 함수는 NULL을 무시해, COUNT(*)만 빼고.
  • 정렬할 때 NULLS FIRST랑 NULLS LAST 키워드 기억해.
  • 리포트에서는 항상 NULL을 어떻게 처리하는지 명확히 써줘야 동료들이 헷갈리지 않아.

이런 걸 알면 쿼리도 제대로 짤 수 있고, 면접에서도 인상 남길 수 있어. 실제 데이터 다루는 능력이 이론보다 훨씬 더 중요하거든!

2
과제
SQL SELF, 레벨 10, 레슨 3
잠금
NULL 값이 있는 행 필터링
NULL 값이 있는 행 필터링
2
과제
SQL SELF, 레벨 10, 레슨 3
잠금
NULL 처리와 함께 최종 합계 계산하기
NULL 처리와 함께 최종 합계 계산하기
코멘트
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION