การใช้เงื่อนไขแบบ OR ใน CASE WHEN ของ MySQL
ใน CASE WHEN สามารถเขียนเงื่อนไขซับซ้อนรวมถึง OR, AND, NOT ได้ โดยตรงในแต่ละ WHEN clause
ตัวอย่างการใช้งาน
สร้างตารางคะแนน:
mysql> CREATE TABLE caseOrConditionDemo (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> Name VARCHAR(100), Score INT
-> );
Query OK, 0 rows affected (0.49 sec)
mysql> INSERT INTO caseOrConditionDemo(Name, Score) VALUES('Larry',85),('Sam',74),('Mike',76),('Carol',65);
Query OK, 4 rows affected (0.18 sec)
ข้อมูลทั้งหมด:
mysql> SELECT * FROM caseOrConditionDemo;
+----+-------+-------+
| Id | Name | Score |
+----+-------+-------+
| 1 | Larry | 85 |
| 2 | Sam | 74 |
| 3 | Mike | 76 |
| 4 | Carol | 65 |
+----+-------+-------+
4 rows in set (0.00 sec)
ใช้ CASE WHEN กำหนดเกรด (มีเงื่อนไข OR โดยปริยายจากลำดับ):
mysql> SELECT Id, Name, Score,
-> CASE
-> WHEN Score > 75 THEN 'Better Score'
-> WHEN Score > 70 THEN 'Good Score'
-> ELSE 'Not Good Score'
-> END AS 'Performance'
-> FROM caseOrConditionDemo;
ผลลัพธ์:
+----+-------+-------+----------------+
| Id | Name | Score | Performance |
+----+-------+-------+----------------+
| 1 | Larry | 85 | Better Score |
| 2 | Sam | 74 | Good Score |
| 3 | Mike | 76 | Better Score |
| 4 | Carol | 65 | Not Good Score |
+----+-------+-------+----------------+
4 rows in set (0.04 sec)
คำอธิบาย
- CASE ประเมิน
WHENตามลำดับ หาเงื่อนไขแรกที่ TRUE แล้วหยุด (Short-circuit) - Score 85: >75 TRUE → 'Better Score' (ไม่ตรวจสอบต่อ)
- Score 74: >75 FALSE, >70 TRUE → 'Good Score'
- Score 65: ทั้งคู่ FALSE → ELSE 'Not Good Score'
ตัวอย่าง OR แบบชัดเจน (Explicit OR)
SELECT Name, Score,
CASE
WHEN Score > 90 OR Score < 50 THEN 'Extreme'
WHEN Score BETWEEN 70 AND 90 THEN 'Good'
ELSE 'Average'
END AS Category
FROM caseOrConditionDemo;
รูปแบบ CASE ทั้งสอง
-- Simple CASE (เปรียบเทียบค่าเดียว)
CASE column
WHEN value1 THEN result1
WHEN value2 THEN result2
ELSE default_result
END
-- Searched CASE (เงื่อนไข Boolean ใดๆ ก็ได้) - ใช้ตัวนี้
CASE
WHEN condition1 THEN result1
WHEN condition2 THEN result2
ELSE default_result
END
Searched CASE ยืดหยุ่นกว่า รองรับ OR, AND, BETWEEN, IN, LIKE, IS NULL ได้หมด