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

ทำไมควรใช้ MySQL CASE Statement? ตัวอย่างเปรียบเทียบค่า

ใช้ CASE สำหรับตรรกะแบบมีเงื่อนไขคงที่ (fixed number of conditions) เช่น เปรียบเทียบค่า

ไวยากรณ์

SELECT *,
       CASE
           WHEN yourColumnName1 > yourColumnName2 THEN 'yourMessage1'
           ELSE 'yourMessage2'
       END AS anyAliasName
FROM yourTableName;

สร้างตารางตัวอย่าง

mysql> create table CaseFunctionDemo (
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    -> Value1 int,
    -> Value2 int
    -> );
Query OK, 0 rows affected (0.56 sec)

เพิ่มข้อมูลตัวอย่าง

mysql> insert into CaseFunctionDemo(Value1,Value2) values(10,20);
mysql> insert into CaseFunctionDemo(Value1,Value2) values(100,40);
mysql> insert into CaseFunctionDemo(Value1,Value2) values(0,20);
mysql> insert into CaseFunctionDemo(Value1,Value2) values(0,-50);

แสดงข้อมูลทั้งหมด

mysql> select * from CaseFunctionDemo;

ผลลัพธ์:

+----+--------+--------+
| Id | Value1 | Value2 |
+----+--------+--------+
| 1  | 10     | 20     |
| 2  | 100    | 40     |
| 3  | 0      | 20     |
| 4  | 0      | -50    |
+----+--------+--------+

ใช้ CASE เปรียบเทียบ Value1 และ Value2

mysql> SELECT *,
    -> CASE WHEN Value1 > Value2 THEN 'Value1 is Greater'
    -> ELSE 'Value2 is Greater'
    -> END AS Comparison
    -> FROM CaseFunctionDemo;

ผลลัพธ์:

+----+--------+--------+-------------------+
| Id | Value1 | Value2 | Comparison        |
+----+--------+--------+-------------------+
| 1  | 10     | 20     | Value2 is Greater |
| 2  | 100    | 40     | Value1 is Greater |
| 3  | 0      | 20     | Value2 is Greater |
| 4  | 0      | -50    | Value1 is Greater |
+----+--------+--------+-------------------+

รูปแบบ CASE ทั้งสองแบบ

1. Simple CASE (เปรียบเทียบค่าเดียว)

CASE expression
    WHEN value1 THEN result1
    WHEN value2 THEN result2
    ELSE default_result
END

2. Searched CASE (เงื่อนไขซับซ้อน) - ใช้ในตัวอย่างข้างต้น

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

กรณีใช้งานจริง

  • จัดกลุ่มข้อมูล (คะแนน -> เกรด A-F)
  • คำนวณส่วนลดตามเงื่อนไข
  • แปลงรหัสสถานะเป็นข้อความอ่านง่าย
  • ป้องกัน Division by zero