Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> MySQL

Cách thay thế giá trị trả về SELECT trong MySQL (CASE WHEN)


Cú pháp CASE WHEN

Sử dụng biểu thức CASE trong câu lệnh SELECT để biến đổi giá trị hiển thị:

SELECT 
    cot1, cot2, ..., 
    CASE WHEN ten_cot = gia_tri_1 THEN 'gia_tri_moi_1'
         WHEN ten_cot = gia_tri_2 THEN 'gia_tri_moi_2'
         ELSE 'gia_tri_mac_dinh'
    END AS ten_alias
FROM ten_bang;

Ví dụ: Chuyển 0/1 thành 'false'/'true'

1. Tạo bảng

mysql> CREATE TABLE selectReturnDemo ( 
-> Id INT, 
-> Name VARCHAR(100), 
-> isGreaterthan18 TINYINT(1) 
-> ); 
Query OK, 0 rows affected (0.62 sec)

2. Chèn dữ liệu

mysql> INSERT INTO selectReturnDemo VALUES(1,'Carol',0); 
Query OK, 1 row affected (0.23 sec) 
mysql> INSERT INTO selectReturnDemo VALUES(2,'Bob',1); 
Query OK, 1 row affected (0.21 sec) 
mysql> INSERT INTO selectReturnDemo VALUES(3,'Mike',1); 
Query OK, 1 row affected (0.18 sec) 
mysql> INSERT INTO selectReturnDemo VALUES(4,'David',0); 
Query OK, 1 row affected (0.21 sec) 
mysql> INSERT INTO selectReturnDemo VALUES(5,'Adam',1); 
Query OK, 1 row affected (0.10 sec)

3. Dữ liệu gốc

mysql> SELECT * FROM selectReturnDemo;
+------+-------+-----------------+ 
| Id   | Name  | isGreaterthan18 | 
+------+-------+-----------------+ 
| 1    | Carol | 0               | 
| 2    | Bob   | 1               | 
| 3    | Mike  | 1               | 
| 4    | David | 0               | 
| 5    | Adam  | 1               | 
+------+-------+-----------------+ 
5 rows in set (0.00 sec)

4. Thay thế giá trị hiển thị

mysql> SELECT Id, Name, 
-> CASE WHEN isGreaterthan18 = 1 THEN 'true' 
-> ELSE 'false' 
-> END AS AgeIsGreaterthan18 
-> FROM selectReturnDemo;
+------+-------+--------------------+ 
| Id   | Name  | AgeIsGreaterthan18 | 
+------+-------+--------------------+ 
| 1    | Carol | false              | 
| 2    | Bob   | true               | 
| 3    | Mike  | true               | 
| 4    | David | false              | 
| 5    | Adam  | true               | 
+------+-------+--------------------+ 
5 rows in set (0.00 sec)

Các dạng CASE

Simple CASE (so sánh bằng)

CASE ten_cot 
    WHEN 'A' THEN 'Loại A' 
    WHEN 'B' THEN 'Loại B' 
    ELSE 'Khác' 
END

Searched CASE (điều kiện phức tạp)

CASE 
    WHEN diem >= 90 THEN 'Xuất sắc' 
    WHEN diem >= 70 THEN 'Khá' 
    WHEN diem >= 50 THEN 'Trung bình' 
    ELSE 'Yếu' 
END

Ứng dụng thực tế

Phân loại độ tuổi

SELECT 
    name,
    age,
    CASE 
        WHEN age < 18 THEN 'Trẻ em'
        WHEN age < 60 THEN 'Người lớn'
        ELSE 'Người cao tuổi'
    END AS age_group
FROM users;

Format trạng thái đơn hàng

SELECT 
    order_id,
    CASE status 
        WHEN 0 THEN 'Chờ xử lý'
        WHEN 1 THEN 'Đang giao'
        WHEN 2 THEN 'Đã giao'
        WHEN 3 THEN 'Đã hủy'
        ELSE 'Không xác định'
    END AS status_text
FROM orders;

Tính giá sau khuyến mãi

SELECT 
    product_name,
    price,
    CASE 
        WHEN is_member = 1 THEN price * 0.9
        WHEN quantity > 10 THEN price * 0.95
        ELSE price
    END AS final_price
FROM products;

Lưu ý

  • CASE trả về kiểu dữ liệu của nhánh đầu tiên không NULL
  • ELSE NULL ngầm định nếu không có ELSE
  • Có thể lồng CASE trong CASE
  • Không dùng CASE trong WHERE (dùng AND/OR)