Để tìm các bản ghi có giá trị trùng lặp trong một cột, kết hợp GROUP BY với HAVING COUNT(*) > 1 là cách tiêu chuẩn và hiệu quả.
Cú pháp
SELECT cot_can_kiem_tra, COUNT(*) AS SoLanXuatHien FROM ten_bang GROUP BY cot_can_kiem_tra HAVING COUNT(*) > 1;
Ví dụ minh họa
Tạo bảng và chèn dữ liệu có giá trị trùng:
CREATE TABLE DemoTable (Value INT); INSERT INTO DemoTable VALUES (20), (10), (30), (10), (30), (40), (50);
Truy vấn tìm giá trị trùng:
SELECT Value, COUNT(*) AS SoLan FROM DemoTable GROUP BY Value HAVING COUNT(*) > 1;
Kết quả
| Value | SoLan |
|---|---|
| 10 | 2 |
| 30 | 2 |
Mở rộng: Lấy toàn bộ bản ghi trùng (không gộp nhóm)
Nếu cần xem chi tiết các hàng trùng (không gom nhóm), dùng subquery:
SELECT *
FROM DemoTable
WHERE Value IN (
SELECT Value
FROM DemoTable
GROUP BY Value
HAVING COUNT(*) > 1
);
Kết quả sẽ trả về 4 hàng: hai hàng giá trị 10 và hai hàng giá trị 30.
Ứng dụng thực tế
- Phát hiện dữ liệu dirty (trùng email, trùng mã sản phẩm, trùng CMND...).
- Dọn dẹp dữ liệu trước khi tạo khóa duy nhất (UNIQUE INDEX).
- Phân tích tần suất xuất hiện.