Vấn đề: Phân loại điểm số thành thông báo văn bản
Cần hiển thị cột kết quả mô tả ("Good Marks" / "Not Good Marks") dựa trên giá trị cột StudentMarks.
Giải pháp: Sử dụng biểu thức CASE
Cú pháp: CASE WHEN condition THEN result ELSE other_result END.
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (
StudentName VARCHAR(20),
StudentMarks INT
);
INSERT INTO DemoTable VALUES
('Chris', 59), ('David', 89), ('Sam', 94), ('Mike', 75), ('Carol', 69);
2. Truy vấn với CASE
SELECT StudentName,
CASE
WHEN StudentMarks > 70 THEN 'Good Marks'
ELSE 'Not Good Marks'
END AS Result
FROM DemoTable;
3. Kết quả
+-------------+----------------+
| StudentName | Result |
+-------------+----------------+
| Chris | Not Good Marks |
| David | Good Marks |
| Sam | Good Marks |
| Mike | Good Marks |
| Carol | Not Good Marks |
+-------------+----------------+
Mở rộng: Nhiều điều kiện (ELSE IF)
SELECT StudentName,
CASE
WHEN StudentMarks >= 90 THEN 'Excellent'
WHEN StudentMarks >= 70 THEN 'Good'
WHEN StudentMarks >= 50 THEN 'Average'
ELSE 'Needs Improvement'
END AS Grade
FROM DemoTable;
Lưu ý
CASEđánh giá theo thứ tự – điều kiện đầu tiên khớp sẽ được chọn.- Có thể dùng dạng
CASE column WHEN value1 THEN ... WHEN value2 THEN ... ENDcho so sánh bằng đơn giản. - Kết quả
CASEcó thể dùng trongORDER BY,GROUP BY,UPDATE, v.v.