Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

เพิ่มคอลัมน์ชั่วคราวใน MySQL ด้วย CASE WHEN ตามเงื่อนไขคอลัมน์อื่น

เมื่อต้องการสร้างคอลัมน์คำนวณชั่วคราว (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 เพื่อสร้างคอลัมน์คำนวณถาวรได้