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

การเลือกค่าจากคอลัมน์เดียวกันแสดงในคอลัมน์ต่างกันด้วย CASE WHEN ใน MySQL

ใช้ CASE WHEN เพื่อแยกค่าจากคอลัมน์เดียวกันออกเป็นหลายคอลัมน์ตามเงื่อนไขที่แตกต่างกัน

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

mysql> create table DemoTable ( 
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    Name varchar(40), Score int ) ; 
Query OK, 0 rows affected (0.54 sec)

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

mysql> insert into DemoTable(Name,Score) values('Chris',45); Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(Name,Score) values('David',68); Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Name,Score) values('Robert',89); Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable(Name,Score) values('Bob',34); Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(Name,Score) values('Sam',66); Query OK, 1 row affected (0.22 sec)

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

mysql> select *from DemoTable;
+----+--------+-------+
| Id | Name   | Score |
+----+--------+-------+
|  1 | Chris  |    45 |
|  2 | David  |    68 |
|  3 | Robert |    89 |
|  4 | Bob    |    34 |
|  5 | Sam    |    66 |
+----+--------+-------+
5 rows in set (0.00 sec)

คิวรี่แยกคะแนนตามช่วง

mysql> select Score, 
    case when Score < 40 then Score end as 'Score Less than 40',
    case when Score between 60 and 70 then Score end as 'Score Between 60 and 70',
    case when Score > 80 then Score end as 'Score greater than 80'
    from DemoTable;

ผลลัพธ์:

+-------+--------------------+--------------------------+-----------------------+
| Score | Score Less than 40 | Score Between 60 and 70  | Score greater than 80 |
+-------+--------------------+--------------------------+-----------------------+
|    45 |               NULL |                     NULL |                  NULL |
|    68 |               NULL |                       68 |                  NULL |
|    89 |               NULL |                     NULL |                    89 |
|    34 |                 34 |                     NULL |                  NULL |
|    66 |               NULL |                       66 |                  NULL |
+-------+--------------------+--------------------------+-----------------------+
5 rows in set, 1 warning (0.03 sec)

รูปแบบ CASE WHEN

-- Simple CASE
CASE column WHEN value1 THEN result1 WHEN value2 THEN result2 ELSE default END

-- Searched CASE (ใช้ในตัวอย่าง)
CASE WHEN condition1 THEN result1 WHEN condition2 THEN result2 ELSE default END

การเพิ่ม ELSE เพื่อไม่ให้เป็น NULL

CASE WHEN Score < 40 THEN Score ELSE 0 END as 'Score Less than 40'

การใช้ CASE ใน UPDATE

UPDATE DemoTable SET Grade = CASE 
    WHEN Score >= 80 THEN 'A'
    WHEN Score >= 70 THEN 'B'
    WHEN Score >= 60 THEN 'C'
    ELSE 'F'
END;