CASE WHEN: cách viết if-else ngay trong câu SQL

Cơ bản 5 phút đọc Cập nhật 30/07/2026 UPA AI Partner

Xuất dữ liệu ra Excel rồi mới phân loại là mất hai tiếng mỗi tuần. Làm ngay trong SQL mất bốn dòng.

Bài toán

Phân loại điểm thi thành Giỏi / Khá / Yếu. Không cần xuất Excel, không cần Python:

SELECT
  id,
  diem,
  CASE
    WHEN diem >= 85 THEN 'Giỏi'
    WHEN diem >= 70 THEN 'Khá'
    ELSE 'Yếu'
  END AS xep_loai
FROM bai_thi;
BAI_THIiddiem192274358485SAU CASE WHENiddiemxep_loai192Giỏi274Khá358Yếu485GiỏiCASE WHEN

Lỗi thường gặp

1. Sắp sai thứ tự điều kiện

CASE dừng lại ở điều kiện đúng đầu tiên. Viết ngược thứ tự là hỏng hết:

-- SAI: mọi điểm từ 70 trở lên đều thành 'Khá'
CASE
  WHEN diem >= 70 THEN 'Khá'
  WHEN diem >= 85 THEN 'Giỏi'
END

Điểm 92 khớp ngay dòng đầu và không bao giờ đi tới dòng thứ hai. Quy tắc: xếp từ điều kiện chặt nhất xuống rộng nhất.

2. Quên ELSE

Không có ELSE thì mọi dòng không khớp sẽ trả về NULL — và NULL lại làm hỏng COUNT, GROUP BY ở bước sau. Luôn viết ELSE.

3. So sánh với NULL

-- Không bao giờ đúng
CASE WHEN diem = NULL THEN 'Chưa thi' END

-- Đúng
CASE WHEN diem IS NULL THEN 'Chưa thi' END

Ba chỗ khác dùng được CASE

Trong ORDER BY — sắp xếp theo thứ tự tuỳ ý

ORDER BY CASE trang_thai
           WHEN 'khan_cap' THEN 1
           WHEN 'dang_xu_ly' THEN 2
           ELSE 3
         END;

Trong SUM — đếm có điều kiện

SELECT
  COUNT(*)                                        AS tong,
  SUM(CASE WHEN diem >= 85 THEN 1 ELSE 0 END)     AS so_gioi
FROM bai_thi;

Đây là kỹ thuật quan trọng nhất trong bài — nó là nền của mọi báo cáo xoay bảng.

Trong GROUP BY — gom theo nhóm tự định nghĩa

SELECT
  CASE WHEN tuoi < 25 THEN '18-24'
       WHEN tuoi < 35 THEN '25-34'
       ELSE '35+' END AS nhom_tuoi,
  COUNT(*)
FROM nguoi_dung
GROUP BY 1;

Luyện tập

  • LeetCode 610 — Triangle Judgement
  • LeetCode 1873 — Calculate Special Bonus
  • LeetCode 627 — Swap Salary
  • LeetCode 1179 — Reformat Department Table
  • HackerRank — Type of Triangle

Tóm lại

  • CASE dừng ở điều kiện đúng đầu tiên — thứ tự quyết định kết quả.
  • Xếp từ chặt nhất xuống rộng nhất.
  • Luôn có ELSE, nếu không sẽ nhận NULL.
  • Dùng IS NULL, không dùng = NULL.
  • SUM(CASE WHEN … THEN 1 ELSE 0 END) là nền của mọi báo cáo xoay bảng.

Bạn vừa học xong CASE WHEN

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

Làm bài tập CASE WHEN 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 →