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.