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

Hiển thị bản ghi có ID không trùng lặp với GROUP BY HAVING MySQL

Để tìm và hiển thị các bản ghi có ID xuất hiện duy nhất 1 lần (không trùng lặp), dùng subquery GROUP BY ... HAVING COUNT(*) < 2 kết hợp IN.

Ví dụ minh họa

Tạo bảng:

mysql> create table DemoTable ( 
    Id int, 
    ColorName varchar(100) 
);

Chèn dữ liệu (Id 100 lặp 3 lần, 101 lặp 2 lần, 102 chỉ 1 lần):

mysql> insert into DemoTable values(100,'Red');
mysql> insert into DemoTable values(101,'Green');
mysql> insert into DemoTable values(101,'Blue');
mysql> insert into DemoTable values(102,'Yellow');
mysql> insert into DemoTable values(100,'Purple');
mysql> insert into DemoTable values(100,'Black');

Hiển thị dữ liệu:

mysql> select * from DemoTable;

Kết quả:

+------+-----------+
| Id   | ColorName |
+------+-----------+
| 100  | Red       |
| 101  | Green     |
| 101  | Blue      |
| 102  | Yellow    |
| 100  | Purple    |
| 100  | Black     |
+------+-----------+

Truy vấn lấy hàng có Id không trùng (xuất hiện 1 lần)

mysql> select * from DemoTable 
where Id in (select Id from DemoTable group by Id having count(*) < 2);

Kết quả:

+------+-----------+
| Id   | ColorName |
+------+-----------+
| 102  | Yellow    |
+------+-----------+

Giải thích:

  • Subquery: GROUP BY Id HAVING COUNT(*) < 2 → chỉ giữ Id có count = 1 → chỉ Id 102
  • Truy vấn chính: WHERE Id IN (...) → lấy toàn bộ cột của hàng Id=102

Cách khác (MySQL 8.0+): Window function COUNT(*) OVER (PARTITION BY Id) as cnt rồi lọc WHERE cnt = 1.

Ứng dụng: Tìm đơn hàng duy nhất, user chỉ có 1 giao dịch, sản phẩm bán chạy duy nhất, v.v.