MySQL การใช้งานฟังก์ชัน CASE

ฟังก์ชัน CASE ใน MySQL คือเครื่องมือสำหรับเขียน เงื่อนไขแบบเลือกหลายกรณี (conditional logic) ภายในคำสั่ง SQL โดยจะ ตรวจสอบค่าแต่ละเงื่อนไขที่กำหนดไว้ และคืนค่าผลลัพธ์แรกที่ตรงกัน หากไม่มีเงื่อนไขไหนตรง จะคืนค่าจาก ELSE (ถ้ามี)

ทำหน้าที่คล้าย IF-ELSE หรือ SWITCH ในภาษาโปรแกรมทั่วไป เหมาะสำหรับแปลงค่าหรือแสดงผลลัพธ์ที่แตกต่างกันตามเงื่อนไขใน SELECT, UPDATE, หรือ ORDER BY

ประโยชน์ของฟังก์ชัน CASE

  • ใช้แทน IF-ELSE แบบหลายเงื่อนไขภายในคำสั่ง SQL
  • สร้างคอลัมน์ใหม่แบบกำหนดค่าตามเงื่อนไขโดยไม่ต้องแก้ไขข้อมูลจริง
  • ใช้จัดกลุ่มข้อความ, แสดงสถานะ, หรือแปลงค่าตัวเลขให้อ่านง่าย
  • ใช้กับ ORDER BY เพื่อกำหนดลำดับพิเศษ
  • ใช้กับ UPDATE เพื่อปรับข้อมูลแบบหลายเงื่อนไขในคำสั่งเดียว

รูปแบบการใช้งาน

แบบที่ 1: CASE value WHEN ... THEN ... ELSE ... END

CASE value
  WHEN compare_value1 THEN result1
  WHEN compare_value2 THEN result2
  ...
  ELSE default_result
END

แบบที่ 2: CASE WHEN condition THEN ... ELSE ... END

CASE
  WHEN condition1 THEN result1
  WHEN condition2 THEN result2
  ...
  ELSE default_result
END

ตัวอย่างการใช้งาน

SQL
SELECT name,
       CASE gender
         WHEN 'M' THEN 'Male'
         WHEN 'F' THEN 'Female'
         ELSE 'Unknown'
       END AS gender_label
FROM employees;

หรือ

SQL
SELECT score,
       CASE
         WHEN score >= 80 THEN 'A'
         WHEN score >= 70 THEN 'B'
         WHEN score >= 60 THEN 'C'
         ELSE 'F'
       END AS grade
FROM test_scores;

ตัวอย่างการประยุกต์ใช้งานกับข้อมูลจริง

สมมุติว่ามีตารางชื่อ orders ซึ่งมีข้อมูลดังนี้

order_id status amount
1pending1200.00
2paid2300.00
3shipped1800.00
4cancelled500.00
5paid3200.00

ใช้ CASE แสดงสถานะแบบอ่านง่าย

SQL
SELECT order_id, status, amount,
       CASE status
         WHEN 'pending' THEN 'รอดำเนินการ'
         WHEN 'paid' THEN 'ชำระแล้ว'
         WHEN 'shipped' THEN 'จัดส่งแล้ว'
         WHEN 'cancelled' THEN 'ยกเลิก'
         ELSE 'ไม่ทราบสถานะ'
       END AS status_label
FROM orders;

ข้อควรระวังในการใช้งาน

  • CASE จะคืนค่าแรกที่ตรงเงื่อนไขทันที โดยไม่ตรวจเงื่อนไขถัดไป
  • ต้อง ปิดท้ายด้วย END เสมอ มิฉะนั้นจะเกิด syntax error
  • ผลลัพธ์ของ CASE ทั้งหมดควรเป็นชนิดข้อมูลเดียวกัน หรือที่แปลงเข้าหากันได้ เช่น ทั้งหมดเป็นข้อความ หรือจำนวน
  • หากไม่มีเงื่อนไขใดตรงและไม่ใส่ ELSE ผลลัพธ์จะเป็น NULL
แชร์เรื่องนี้