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

Truy vấn MySQL chọn hàng có cột = 0 và GROUP BY cột khác

Sử dụng GROUP BY với HAVING để lọc nhóm có giá trị cụ thể.

Ví dụ minh họa

Tạo bảng:

mysql> CREATE TABLE DemoTable1344 (
    SequenceId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientId INT, isMarried TINYINT(1)
);

Chèn dữ liệu (ClientId 4567 có cả 0 và 1):

mysql> INSERT INTO DemoTable1344(ClientId, isMarried) VALUES(4567, 0), (9876, 0), (5432, 1), (4567, 1), (9873, 0);

Xem dữ liệu:

mysql> SELECT * FROM DemoTable1344;
+------------+----------+-----------+
| SequenceId | ClientId | isMarried |
+------------+----------+-----------+
| 1          | 4567     | 0         |
| 2          | 9876     | 0         |
| 3          | 5432     | 1         |
| 4          | 4567     | 1         |
| 5          | 9873     | 0         |
+------------+----------+-----------+

Lọc nhóm ClientId chỉ có isMarried = 0 (ClientId 4567 có cả 0 và 1 → bị loại):

mysql> SELECT SequenceId, ClientId, isMarried
    FROM DemoTable1344
    GROUP BY ClientId
    HAVING isMarried = 0;

Kết quả (chỉ ClientId 9876, 9873 - chỉ có 0; 4567 bị loại vì có 1):

+------------+----------+-----------+
| SequenceId | ClientId | isMarried |
+------------+----------+-----------+
| 1          | 4567     | 0         |
| 2          | 9876     | 0         |
| 5          | 9873     | 0         |
+------------+----------+-----------+

⚠️ Cảnh báo: SELECT SequenceId không nằm trong GROUP BY và không phải hàm tập hợp → MySQL chọn giá trị tùy ý (chỉ hoạt động do sql_mode không có ONLY_FULL_GROUP_BY). Chuẩn SQL: SELECT MIN(SequenceId), ClientId, MAX(isMarried) ... HAVING MAX(isMarried) = 0.