ใช้ CASE สำหรับตรรกะแบบมีเงื่อนไขคงที่ (fixed number of conditions) เช่น เปรียบเทียบค่า
ไวยากรณ์
SELECT *,
CASE
WHEN yourColumnName1 > yourColumnName2 THEN 'yourMessage1'
ELSE 'yourMessage2'
END AS anyAliasName
FROM yourTableName;
สร้างตารางตัวอย่าง
mysql> create table CaseFunctionDemo (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Value1 int,
-> Value2 int
-> );
Query OK, 0 rows affected (0.56 sec)
เพิ่มข้อมูลตัวอย่าง
mysql> insert into CaseFunctionDemo(Value1,Value2) values(10,20); mysql> insert into CaseFunctionDemo(Value1,Value2) values(100,40); mysql> insert into CaseFunctionDemo(Value1,Value2) values(0,20); mysql> insert into CaseFunctionDemo(Value1,Value2) values(0,-50);
แสดงข้อมูลทั้งหมด
mysql> select * from CaseFunctionDemo;
ผลลัพธ์:
+----+--------+--------+ | Id | Value1 | Value2 | +----+--------+--------+ | 1 | 10 | 20 | | 2 | 100 | 40 | | 3 | 0 | 20 | | 4 | 0 | -50 | +----+--------+--------+
ใช้ CASE เปรียบเทียบ Value1 และ Value2
mysql> SELECT *,
-> CASE WHEN Value1 > Value2 THEN 'Value1 is Greater'
-> ELSE 'Value2 is Greater'
-> END AS Comparison
-> FROM CaseFunctionDemo;
ผลลัพธ์:
+----+--------+--------+-------------------+ | Id | Value1 | Value2 | Comparison | +----+--------+--------+-------------------+ | 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 ทั้งสองแบบ
1. Simple CASE (เปรียบเทียบค่าเดียว)
CASE expression
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
2. Searched CASE (เงื่อนไขซับซ้อน) - ใช้ในตัวอย่างข้างต้น
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
กรณีใช้งานจริง
- จัดกลุ่มข้อมูล (คะแนน -> เกรด A-F)
- คำนวณส่วนลดตามเงื่อนไข
- แปลงรหัสสถานะเป็นข้อความอ่านง่าย
- ป้องกัน Division by zero