COALESCE và NULLIF: hai hàm dọn sạch mọi ô trống trong báo cáo

Nâng cao 5 phút đọc Cập nhật 30/07/2026 UPA AI Partner

Báo cáo gửi sếp có 40 ô hiện chữ “null”. Sửa bằng hai hàm, không cần đụng đến dữ liệu gốc.

Bài toán

Báo cáo có ô trống ở khắp nơi. Không phải lỗi dữ liệu — chỉ là chưa có thông tin. Nhưng hiện NULL thì trông như hỏng.

THÔtendien_thoaiso_duAn09011200BìnhNULLNULLChiNULL800SAU COALESCEtendien_thoaiso_duAn09011200Bìnhchưa có0Chichưa có800COALESCE

COALESCE — lấy giá trị đầu tiên khác NULL

SELECT
  ten,
  COALESCE(dien_thoai, email, 'chưa có') AS lien_he,
  COALESCE(so_du, 0)                     AS so_du
FROM khach_hang;

Nó duyệt từ trái sang phải và dừng ở giá trị đầu tiên không phải NULL. Nhận bao nhiêu tham số cũng được.

Đừng thay NULL bằng 0 một cách máy móc Với số tiền chưa phát sinh thì 0 là đúng. Với điểm thi chưa có thì 0 là sai — nó kéo điểm trung bình xuống. NULL mang nghĩa “không biết”, và AVG cố tình bỏ qua nó.

NULLIF — biến một giá trị thành NULL

NULLIF(a, b)   -- trả về NULL nếu a = b, ngược lại trả về a

Công dụng lớn nhất: chặn lỗi chia cho 0.

SELECT ROUND(100.0 * so_dat / NULLIF(tong, 0), 1) AS ty_le
FROM thong_ke;

Mẫu số bằng 0 thành NULL, phép chia trả về NULL thay vì làm hỏng cả truy vấn.

Công dụng thứ hai: coi chuỗi rỗng như thiếu dữ liệu.

COALESCE(NULLIF(TRIM(ghi_chu), ''), 'không có ghi chú')

Lỗi thường gặp

1. Dùng ISNULL hoặc IFNULL rồi mang sang hệ khác

ISNULL là SQL Server, IFNULL là MySQL, NVL là Oracle. Chỉ COALESCE là chuẩn ANSI và chạy ở mọi nơi.

2. COALESCE làm mất chỉ mục

-- Quét toàn bảng
WHERE COALESCE(trang_thai, 'moi') = 'moi'

-- Dùng được chỉ mục
WHERE trang_thai = 'moi' OR trang_thai IS NULL

3. Kiểu dữ liệu không khớp

-- Lỗi trên vài hệ: trộn số và chuỗi
COALESCE(so_luong, 'chưa nhập')

Mọi tham số phải cùng kiểu. Muốn hiển thị chữ thì ép số sang chuỗi trước.

Luyện tập

  • LeetCode 1179 — Reformat Department Table
  • LeetCode 1795 — Rearrange Products Table
  • LeetCode 1965 — Employees With Missing Information
  • LeetCode 1075 — Project Employees I
  • HackerRank — Population Census

Tóm lại

  • COALESCE trả về giá trị đầu tiên khác NULL, chạy trên mọi hệ.
  • Chỉ thay NULL bằng 0 khi 0 thật sự đúng nghĩa.
  • NULLIF(mẫu, 0) là cách chuẩn chặn lỗi chia cho 0.
  • COALESCE trong WHERE làm mất chỉ mục.
  • Mọi tham số của COALESCE phải cùng kiểu dữ liệu.

Bạn vừa học xong COALESCE và NULLIF

Sẵn sàng luyện tập chưa?

Làm bài tập COALESCE và NULLIF trên dữ liệu thật, chấm điểm ngay khi bạn bấm chạy.

Bắt đầu luyện tập →