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

GROUP BY có điều kiện với NOT IN để lọc bản ghi trùng lặp trong MySQL

Lọc nhóm bản ghi có điều kiện bằng NOT IN trong MySQL

Khi cần nhóm dữ liệu nhưng chỉ giữ lại các nhóm thỏa mãn điều kiện nhất định (ví dụ: tất cả bản ghi trong nhóm có cùng giá trị Score), ta có thể dùng NOT IN với truy vấn con.

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

mysql> CREATE TABLE DemoTable (
    Name VARCHAR(40),
    Score INT
);
mysql> INSERT INTO DemoTable VALUES ('Adam', 89), ('Adam', 89), ('Chris', 89), ('Chris', 89), ('Bob', 98), ('Bob', 89);

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;

Kết quả:

+-------+-------+
| Name  | Score |
+-------+-------+
| Adam  | 89    |
| Adam  | 89    |
| Chris | 89    |
| Chris | 89    |
| Bob   | 98    |
| Bob   | 89    |
+-------+-------+

3. Truy vấn: Lấy tên những người có TẤT CẢ bản ghi Score = 89

mysql> SELECT DISTINCT Name FROM DemoTable
    WHERE Name NOT IN (
        SELECT Name FROM DemoTable WHERE Score <> 89
    );

4. Kết quả

+-------+
| Name  |
+-------+
| Adam  |
| Chris |
+-------+

Giải thích:

  • Truy vấn con tìm các tên có ít nhất 1 bản ghi Score ≠ 89 → chỉ có 'Bob'
  • Truy vấn chính loại trừ 'Bob' bằng NOT IN → chỉ còn 'Adam' và 'Chris' (hai người này chỉ có Score = 89)

Ứng dụng: Kỹ thuật này hữu ích khi cần tìm các thực thể "hoàn toàn thỏa mãn" một điều kiện (ví dụ: khách hàng chỉ mua hàng loại A, sinh viên chỉ đạt điểm A, v.v.).