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

Cách chọn các bản ghi trùng lặp và đếm số lượng trong MySQL

Để tìm các giá trị trùng lặp trong một cột và đếm số lần xuất hiện, dùng GROUP BY kết hợp HAVING COUNT(*) > 1.

Ví dụ minh họa

Tạo bảng và chèn dữ liệu có trùng lặp:

CREATE TABLE duplicateRecords (
    ClientId INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    ClientName VARCHAR(20)
);

INSERT INTO duplicateRecords (ClientName) VALUES ('John');
INSERT INTO duplicateRecords (ClientName) VALUES ('Carol');
INSERT INTO duplicateRecords (ClientName) VALUES ('John');
INSERT INTO duplicateRecords (ClientName) VALUES ('Sam');
INSERT INTO duplicateRecords (ClientName) VALUES ('Sam');
INSERT INTO duplicateRecords (ClientName) VALUES ('Bob');
INSERT INTO duplicateRecords (ClientName) VALUES ('John');
INSERT INTO duplicateRecords (ClientName) VALUES ('Sam');

Dữ liệu (8 hàng):

+----------+------------+
| ClientId | ClientName |
+----------+------------+
| 1        | John       |
| 2        | Carol      |
| 3        | John       |
| 4        | Sam        |
| 5        | Sam        |
| 6        | Bob        |
| 7        | John       |
| 8        | Sam        |
+----------+------------+

Truy vấn tìm trùng lặp và đếm:

SELECT ClientName, COUNT(*) AS DuplicateCount
FROM duplicateRecords
GROUP BY ClientName
HAVING DuplicateCount > 1;

Kết quả:

+------------+----------------+
| ClientName | DuplicateCount |
+------------+----------------+
| John       | 3              |
| Sam        | 3              |
+------------+----------------+

Giải thích:

  • GROUP BY ClientName gom nhóm các hàng cùng tên.
  • COUNT(*) đếm số hàng trong mỗi nhóm.
  • HAVING DuplicateCount > 1 lọc chỉ giữ nhóm có số lượng > 1 (tức là trùng lặp).

Mở rộng: Nếu muốn xem chi tiết các hàng trùng (kể cả ID), có thể JOIN lại bảng gốc hoặc dùng window function ROW_NUMBER() (MySQL 8.0+).