Để 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 ClientNamegom nhóm các hàng cùng tên.COUNT(*)đếm số hàng trong mỗi nhóm.HAVING DuplicateCount > 1lọ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+).