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

Kiểm tra giá trị có xuất hiện trong nhóm GROUP BY trong MySQL

Sử dụng hàm tổng hợp SUM() kết hợp biểu thức điều kiện để kiểm tra xem một giá trị cụ thể có xuất hiện trong mỗi nhóm hay không.

Cú pháp

SELECT 
    cột_nhóm,
    IF(SUM(cột_giá_trị = 'giá_trị_cần_tìm'), 'YES', 'NO') AS có_xuất_hiện
FROM tên_bảng
GROUP BY cột_nhóm;

Trong MySQL, (cột = giá_trị) trả về 1 (true) hoặc 0 (false). SUM() cộng dồn → >0 nghĩa là có xuất hiện.

Ví dụ minh họa

Tạo bảng demo:

mysql> CREATE TABLE GroupbygroupDemo (
    -> UserId INT,
    -> UserName VARCHAR(20)
    -> );
Query OK, 0 rows affected (1.48 sec)

Chèn dữ liệu:

mysql> INSERT INTO GroupbygroupDemo VALUES
    -> (10, 'John'), (10, 'Carol'), (10, 'Carol'), (20, 'David'),
    -> (30, 'John'), (30, 'David'), (30, 'Mike');

Xem dữ liệu:

mysql> SELECT * FROM GroupbygroupDemo;
+--------+----------+
| UserId | UserName |
+--------+----------+
| 10     | John     |
| 10     | Carol    |
| 10     | Carol    |
| 20     | David    |
| 30     | John     |
| 30     | David    |
| 30     | Mike     |
+--------+----------+

Kiểm tra xem tên 'David' có trong mỗi nhóm UserId không:

mysql> SELECT UserId,
    -> IF(SUM(UserName = 'David'), 'YES', 'NO') AS Correct_Name_David
    -> FROM GroupbygroupDemo
    -> GROUP BY UserId;
+--------+--------------------+
| UserId | Correct_Name_David |
+--------+--------------------+
| 10     | NO                 |
| 20     | YES                |
| 30     | YES                |
+--------+--------------------+

Giải thích

  • UserId=10: Không có 'David' → SUM(0+0+0)=0 → IF(0,'YES','NO')='NO'
  • UserId=20: Có 1 'David' → SUM(1)=1 → IF(1,'YES','NO')='YES'
  • UserId=30: Có 1 'David' → SUM(1)=1 → 'YES'

Mở rộng: Đếm số lần xuất hiện

SELECT UserId, SUM(UserName = 'David') AS David_Count
FROM GroupbygroupDemo
GROUP BY UserId;

Ứng dụng thực tế

  • Kiểm tra user có quyền admin trong nhóm: SUM(role='admin')
  • Phát hiện đơn hàng có sản phẩm khuyến mãi: SUM(product_type='promo')
  • Kiểm tra ca làm việc có nhân viên kỹ thuật: SUM(dept='IT')

Cách viết chuẩn SQL (CASE)

SELECT UserId,
       CASE WHEN SUM(CASE WHEN UserName = 'David' THEN 1 ELSE 0 END) > 0 
            THEN 'YES' ELSE 'NO' END AS Has_David
FROM GroupbygroupDemo
GROUP BY UserId;