Mục đích
CASE WHEN dùng cho logic rẽ nhánh có số lượng điều kiện cố định, thay thế cho nhiều IF lồng nhau.
Cú pháp
SELECT *,
CASE
WHEN cot1 > cot2 THEN 'Thong_bao_1'
ELSE 'Thong_bao_2'
END AS ten_alias
FROM bang;
Ví dụ: So sánh 2 cột số
Dữ liệu
+----+--------+--------+ | Id | Value1 | Value2 | +----+--------+--------+ | 1 | 10 | 20 | | 2 | 100 | 40 | | 3 | 0 | 20 | | 4 | 0 | -50 | +----+--------+--------+
Truy vấn CASE
mysql> SELECT *,
-> CASE WHEN Value1 > Value2 THEN 'Value1 is Greater'
-> ELSE 'Value2 is Greater' END AS Comparision
-> FROM CaseFunctionDemo;
Kết quả
+----+--------+--------+-------------------+ | Id | Value1 | Value2 | Comparision | +----+--------+--------+-------------------+ | 1 | 10 | 20 | Value2 is Greater | | 2 | 100 | 40 | Value1 is Greater | | 3 | 0 | 20 | Value2 is Greater | | 4 | 0 | -50 | Value1 is Greater | +----+--------+--------+-------------------+
CASE dạng tìm kiếm (Searched CASE) vs CASE đơn giản (Simple CASE)
Searched CASE (linh hoạt hơn)
CASE
WHEN dieu_kien_1 THEN ket_qua_1
WHEN dieu_kien_2 THEN ket_qua_2
ELSE ket_qua_mac_dinh
END
Simple CASE (so sánh bằng)
CASE bieu_thuc
WHEN gia_tri_1 THEN ket_qua_1
WHEN gia_tri_2 THEN ket_qua_2
ELSE ket_qua_mac_dinh
END
Khi nào dùng CASE?
- Phân loại dữ liệu (nhóm tuổi, cấp độ, trạng thái)
- Tính toán có điều kiện (giảm giá, thuế, phí)
- Chuyển đổi giá trị hiển thị (0/1 → Có/Không)
- Logic nghiệp vụ phức tạp trong SELECT
Lợi ích: Đọc dễ hiểu, bảo trì dễ dàng, hiệu năng tốt hơn nhiều IF lồng nhau.