Tìm và xử lý dữ liệu trùng lặp trong SQL mà không làm mất bản ghi gốc

Bded63d4-5a49-4cd2-81d2-de0f79af587e

Bí quyết phát hiện và xử lý dữ liệu trùng lặp trong SQL. Ứng dụng ROW_NUMBER() PARTITION BY giúp giữ lại bản ghi mới nhất và đảm bảo tính toàn vẹn CSDL.

1. Tác hại của dữ liệu trùng lặp trong cơ sở dữ liệu

Trong quá trình thu thập dữ liệu, việc xuất hiện các dòng trùng lặp là điều khó tránh khỏi.

Nếu không tiến hành xử lý dữ liệu trùng lặp trong SQL, doanh nghiệp sẽ gặp nhiều hệ lụy lớn:

  • Sai lệch kết quả thống kê doanh thu và số lượng khách hàng.

  • Lãng phí không gian lưu trữ hệ thống.

  • Giảm hiệu suất câu lệnh truy vấn dữ liệu.

  • Giảm độ tin cậy của các báo cáo trực quan.

2. Cách phát hiện dữ liệu trùng lặp bằng GROUP BY

Trước khi xóa dữ liệu, bạn cần khoanh vùng các dòng bị trùng lặp. Chúng ta dùng câu lệnh kết hợp GROUP BY và HAVING:

SQL

SELECT Email, COUNT(*) AS SoLuong
FROM KhachHang
GROUP BY Email
HAVING COUNT(*) > 1;

Câu lệnh trên giúp bạn phát hiện nhanh các khách hàng đăng ký trùng lặp Email.

3. Bí quyết xử lý dữ liệu trùng lặp trong SQL bằng ROW_NUMBER()

Phương pháp an toàn nhất để loại bỏ dữ liệu trùng lặp là dùng Window Function kết hợp ROW_NUMBER() và PARTITION BY.

Cách này giúp đánh số thứ tự cho các dòng trùng nhau. Bạn có thể giữ lại dòng mới nhất như sau:

SQL

WITH CTE_TrungLap AS (
    SELECT 
        MaKhachHang,
        Email,
        NgayTao,
        ROW_NUMBER() OVER (
            PARTITION BY Email 
            ORDER BY NgayTao DESC
        ) AS RowNum
    FROM KhachHang
)
DELETE FROM CTE_TrungLap
WHERE RowNum > 1;

4. Giải thích cơ chế hoạt động chi tiết

  • PARTITION BY Email: Gom nhóm các dòng có cùng Email thành từng cụm riêng biệt.

  • ORDER BY NgayTao DESC: Sắp xếp trong mỗi cụm sao cho bản ghi mới nhất đứng đầu (RowNum = 1).

  • ROW_NUMBER(): Đánh số thứ tự từ 1 cho các dòng trong cụm. Các dòng trùng lặp phía sau nhận giá trị từ 2 trở lên.

  • DELETE ... WHERE RowNum > 1: Lọc và xóa toàn bộ các dòng dư thừa, giữ lại đúng một bản ghi mới nhất.

5. Lợi ích khi ứng dụng Window Function

  • An toàn tuyệt đối: Không làm mất mát nhầm lẫn dữ liệu gốc nhờ điều kiện sắp xếp chặt chẽ.

  • Linh hoạt cao: Dễ dàng thay đổi tiêu chí giữ lại theo nhu cầu thực tế.

  • Hiệu suất tốt: Thực hiện trực tiếp trên cơ sở dữ liệu lớn nhanh chóng.

6. Tổng kết

Thành thạo kỹ năng phát hiện và xử lý dữ liệu trùng lặp trong SQL là thế mạnh của Data Analyst. Cơ sở dữ liệu sạch là nền tảng vững chắc cho mọi báo cáo kinh doanh.

✍️ Tác giả: Phan Thị Như Phước – Data Analyst tại MCNA Technology School

📞 Hotline: 0939.866.825 (Mr. Minh Khang)

🌐 Website: mcna.vn

📍 Hà Nội: 30 Trung Liệt, Đống Đa | Liền kề 44B TT2 Văn Quán, Hà Đông

📍 TP.HCM: 50B Phan Tây Hồ, Cầu Kiệu

→ Chỉ mục