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

Sử dụng CASE WHEN trong SELECT để kiểm tra tồn tại giá trị trong nhóm MySQL

Giới thiệu

Kết hợp CASE WHEN với hàm tập hợp MAX() và GROUP BY để kiểm tra xem một giá trị cụ thể có xuất hiện trong nhóm hay không (trả về 1/0).

1. Tạo bảng và dữ liệu

mysql> create table DemoTable (
    -> FirstName varchar(20),
    -> Score int
    -> ); 
Query OK, 0 rows affected (0.63 sec)

mysql> insert into DemoTable values('John',46); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('John',78); 
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('John',69); 
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris',78); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('Chris',89); 
Query OK, 1 row affected (0.17 sec)

2. Dữ liệu gốc

mysql> select *from DemoTable;
+-----------+-------+
| FirstName | Score |
+-----------+-------+
| John      |    46 |
| John      |    78 |
| John      |    69 |
| Chris     |    78 |
| Chris     |    89 |
+-----------+-------+
5 rows in set (0.00 sec)

3. Kiểm tra xem có điểm 69 trong mỗi nhóm tên không

mysql> select FirstName,
    -> max(case when Score = 69 then 1 else 0 end) as isExistsOrNot
    -> from DemoTable
    -> group by FirstName;

Logic:

  • CASE WHEN Score=69 THEN 1 ELSE 0 END: Mỗi hàng → 1 nếu Score=69, ngược lại 0
  • MAX(...): Nếu có ít nhất một 1 trong nhóm → MAX = 1 (tồn tại), ngược lại 0
  • GROUP BY FirstName: Gom theo tên

4. Kết quả

+-----------+---------------+
| FirstName | isExistsOrNot |
+-----------+---------------+
| John      |             1 |
| Chris     |             0 |
+-----------+---------------+
2 rows in set (0.00 sec)

Mở rộng:

  • Đếm số lần xuất hiện: SUM(CASE WHEN Score=69 THEN 1 ELSE 0 END)
  • Kiểm tra nhiều giá trị: MAX(CASE WHEN Score IN (69,78) THEN 1 ELSE 0 END)
  • MySQL 8.0+: Dùng BOOL_OR(Score=69) hoặc MAX(Score=69) (boolean expression trả về 1/0)

Kỹ thuật này gọi là "pivot conditional aggregation" - biến hàng thành cột dựa trên điều kiện.