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

Tìm các giá trị xuất hiện nhiều hơn một lần trong MySQL

Để 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ả

ValueSoLan
102
302

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.