เมื่อต้องการสร้างคอลัมน์คำนวณชั่วคราว (computed column) ที่ค่าเปลี่ยนแปลงตามเงื่อนไขของคอลัมน์อื่น สามารถใช้คำสั่ง CASE WHEN ได้อย่างมีประสิทธิภาพ
สถานการณ์ตัวอย่าง
ต้องการคำนวณเงินเดือนใหม่ (NewSalary) จากเงินเดือนปัจจุบันและประสบการณ์ทำงาน:
- ประสบการณ์ 5 ปี → เพิ่ม 10,000
- ประสบการณ์ 8 ปี → เพิ่ม 20,000
- อื่นๆ → ไม่เพิ่ม (NULL)
สร้างตารางและข้อมูลทดสอบ
mysql> create table DemoTable (
EmployeeId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
EmployeeName varchar(20),
EmployeeSalary int,
EmployeeExperience int
);
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Larry',4500,5);
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Mike',130000,8);
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Sam',11000,5);
mysql> insert into DemoTable(EmployeeName,EmployeeSalary,EmployeeExperience) values('Carol',140000,8);
คำสั่ง SELECT พร้อมคอลัมน์คำนวณ
mysql> select EmployeeId, EmployeeName, EmployeeSalary, EmployeeExperience,
case
when EmployeeExperience = 5 then EmployeeSalary + 10000
when EmployeeExperience = 8 then EmployeeSalary + 20000
else null
end as NewSalary
from DemoTable;
ผลลัพธ์
+------------+--------------+----------------+--------------------+-----------+ | EmployeeId | EmployeeName | EmployeeSalary | EmployeeExperience | NewSalary | +------------+--------------+----------------+--------------------+-----------+ | 1 | Larry | 4500 | 5 | 14500 | | 2 | Mike | 130000 | 8 | 150000 | | 3 | Sam | 11000 | 5 | 21000 | | 4 | Carol | 140000 | 8 | 160000 | +------------+--------------+----------------+--------------------+-----------+
รูปแบบ CASE WHEN
CASE
WHEN เงื่อนไข1 THEN ผลลัพธ์1
WHEN เงื่อนไข2 THEN ผลลัพธ์2
...
ELSE ผลลัพธ์เริ่มต้น
END
เคล็ดลับเพิ่มเติม
- สามารถใช้
COALESCE()แทน ELSE NULL เพื่อกำหนดค่าเริ่มต้นได้ - รองรับเงื่อนไขซับซ้อนได้ เช่น ช่วงค่า (BETWEEN), การเปรียบเทียบสตริง, และฟังก์ชันต่างๆ
- ใน MySQL 8.0+ สามารถใช้ Generated Columns เพื่อสร้างคอลัมน์คำนวณถาวรได้