MySQL การใช้งานคำสั่ง CASE

คำสั่ง CASE ใน SQL ใช้เพื่อสร้างเงื่อนไขแบบ IF-ELSE ภายในคำสั่ง SELECT, UPDATE, หรือ ORDER BY โดยสามารถใช้ตรวจสอบเงื่อนไขและคืนค่าที่แตกต่างกันแล้วแต่กรณี

รูปแบบคำสั่ง

SELECT 
  column,
  CASE
    WHEN condition1 THEN result1
    WHEN condition2 THEN result2
    ...
    ELSE default_result
  END AS alias_name
FROM table_name;
  • WHEN = เงื่อนไข
  • THEN = ค่าที่จะแสดงถ้าเงื่อนไขเป็นจริง
  • ELSE = ค่าที่จะแสดงถ้าไม่มีเงื่อนไขใดเป็นจริง
  • END = สิ้นสุด CASE
  • สามารถตั้งชื่อ alias ได้

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

แสดงระดับของยอดชำระเงิน (amount) จากตาราง payment

SQL
SELECT payment_id, amount,
  CASE
    WHEN amount < 5 THEN 'Low'
    WHEN amount BETWEEN 5 AND 10 THEN 'Medium'
    ELSE 'High'
  END AS payment_level
FROM payment;
  • ตรวจสอบแต่ละแถวของ amount
  • แบ่งออกเป็น 3 กลุ่ม
  • น้อยกว่า 5 = 'Low'
  • ระหว่าง 5 ถึง 10 = 'Medium'
  • มากกว่า 10 = 'High'
  • ผลลัพธ์จะมีคอลัมน์ใหม่ชื่อ payment_level

แสดงข้อความแทนค่าความยาวของภาพยนตร์

SQL
SELECT title, length,
  CASE
    WHEN length >= 120 THEN 'ยาวมาก'
    WHEN length >= 90 THEN 'ปานกลาง'
    ELSE 'สั้น'
  END AS length_description
FROM film;
  • จัดกลุ่มภาพยนตร์ตามความยาว และแสดงคำอธิบายแทนตัวเลข
    • ถ้ายาว 120 นาทีขึ้นไป แสดงคำว่า ยาวมาก
    • ถ้ายาว 90 นาทีขึ้นไป แต่ไม่ถึง 120 นาที แสดงคำว่า ปานกลาง
    • ถ้าไม่เข้าเงื่อนไข 2 ข้อข้างต้น แสดงคำว่า สั้น
    • ผลลัพธ์จะอยู่ที่คอลัมน์ length_description ซึ่งตั้งชื่อขึ้นมาใหม่

ใช้กับ ORDER BY

SQL
SELECT title, rating
FROM film
ORDER BY
  CASE
    WHEN rating = 'G' THEN 1
    WHEN rating = 'PG' THEN 2
    ELSE 3
  END;
  • เรียงลำดับแบบกำหนดเอง โดยจัด G ไว้ก่อน PG แล้วจึงเป็นเรตอื่น ๆ

ใช้ใน UPDATE (เปลี่ยนค่าแบบมีเงื่อนไข)

SQL
UPDATE payment
SET amount = 
  CASE
    WHEN amount < 5 THEN amount + 1
    ELSE amount
  END;
  • เพิ่มเงิน 1 ดอลล่าร์ให้เฉพาะรายการที่มียอดน้อยกว่า 5 ดอลล่าร์
แชร์เรื่องนี้