MariaDB
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> MariaDB

4 cách để chọn hàng trùng lặp trong MariaDB

Nếu bạn có một bảng mà bạn nghi ngờ có các hàng trùng lặp trong cơ sở dữ liệu MariaDB của mình, bạn có thể sử dụng bất kỳ truy vấn nào sau đây để biết có bao nhiêu hàng trùng lặp.

Dữ liệu mẫu

Giả sử chúng ta có một bảng với dữ liệu sau:

  SELECT * FROM Pets;  

Kết quả:

 + --------- + ----------- + ----------- + | PetId | PetName | PetType || --------- + ----------- + ----------- || 1 | Wag | Con chó || 1 | Wag | Con chó || 2 | Cào | Con mèo || 3 | Tweet | Con chim || 4 | Vỏ cây | Con chó || 4 | Vỏ cây | Con chó || 4 | Vỏ cây | Con chó | + --------- + ----------- + ----------- + 

Hai hàng đầu tiên là bản sao và ba hàng cuối cùng là bản sao.

Tùy chọn 1

Chúng ta có thể sử dụng truy vấn sau để xem có bao nhiêu hàng trùng lặp:

  CHỌN DISTINCT PetId, COUNT (*) AS "Đếm" TỪ PetsGROUP BY PetIdORDER BY PetId;  

Kết quả:

 + --------- + --------- + | PetId | Tính || --------- + --------- || 1 | 2 || 2 | 1 || 3 | 1 || 4 | 3 | + --------- + --------- + 

Chúng tôi có thể mở rộng SELECT danh sách để bao gồm nhiều cột hơn nếu cần:

  CHỌN PetId, PetName, PetType, COUNT (*) AS "Count" FROM PetsGROUP BY PetId, PetName, PetTypeORDER BY PetId;  

Kết quả:

 + --------- + ----------- + ----------- + --------- + | PetId | PetName | PetType | Tính || --------- + ----------- + ----------- + --------- || 1 | Wag | Con chó | 2 || 2 | Cào | Con mèo | 1 || 3 | Tweet | Chim | 1 || 4 | Vỏ cây | Con chó | 3 | + --------- + ----------- + ----------- + --------- +  

Ngoài ra, chúng tôi có thể sắp xếp nó theo số lượng theo thứ tự giảm dần, để các hàng có nhiều bản sao nhất xuất hiện đầu tiên:

  CHỌN PetId, PetName, PetType, COUNT (*) AS "Count" TỪ PetsGROUP THEO PetId, PetName, PetTypeORDER BY Count DESC;  

Kết quả:

 + ------- + --------- + --------- + ------- + | PetId | PetName | PetType | Tính | + ------- + --------- + --------- + ------- + | 4 | Vỏ cây | Con chó | 3 || 1 | Wag | Con chó | 2 || 3 | Tweet | Chim | 1 || 2 | Cào | Con mèo | 1 | + ------- + --------- + --------- + ------- + 

Tùy chọn 2

Nếu chúng ta chỉ muốn các hàng trùng lặp được liệt kê, chúng ta có thể sử dụng HAVING mệnh đề loại trừ các hàng không trùng lặp:

  CHỌN PetId, PetName, PetType, COUNT (*) AS "Count" TỪ PetsGROUP BY PetId, PetName, PetTypeHAVING COUNT (*)> 1ORDER BY PetId;  

Kết quả:

 + ------- + --------- + --------- + ------- + | PetId | PetName | PetType | Tính | + ------- + --------- + --------- + ------- + | 1 | Wag | Con chó | 2 || 4 | Vỏ cây | Con chó | 3 | + ------- + --------- + --------- + ------- + 

Tùy chọn 3

Một cách khác để làm điều đó là sử dụng ROW_NUMBER () chức năng với PARTITION BY mệnh đề đánh số đầu ra của tập kết quả.

  SELECT *, ROW_NUMBER () OVER (PHẦN BỞI PetId, PetName, PetType ORDER BY PetId, PetName, PetType) AS Row_NumberFROM Pets;  

Kết quả:

 + ------- + --------- + --------- + ------------ + | PetId | PetName | PetType | Row_Number | + ------- + --------- + --------- + ------------ + | 1 | Wag | Con chó | 1 || 1 | Wag | Con chó | 2 || 2 | Cào | Con mèo | 1 || 3 | Tweet | Chim | 1 || 4 | Vỏ cây | Con chó | 1 || 4 | Vỏ cây | Con chó | 2 || 4 | Vỏ cây | Con chó | 3 | + ------- + --------- + --------- + ------------ + 

PARTITION BY mệnh đề chia tập kết quả được tạo ra bởi FROM mệnh đề thành các phân vùng mà hàm được áp dụng. Khi chúng ta chỉ định phân vùng cho tập kết quả, mỗi phân vùng sẽ làm cho việc đánh số bắt đầu lại (tức là việc đánh số sẽ bắt đầu từ 1 cho hàng đầu tiên trong mỗi phân vùng).

Tùy chọn 4

Để chỉ trả về các hàng thặng dư từ các bản sao phù hợp, chúng ta có thể sử dụng truy vấn trên làm biểu thức bảng chung, như sau:

  WITH cte AS (SELECT *, ROW_NUMBER () OVER (PARTITION BY PetId, PetName, PetType ORDER BY PetId, PetName, PetType) AS Row_Number FROM Pets) CHỌN * TỪ cte WHERE Row_Number <> 1;  

Kết quả:

 + ------- + --------- + --------- + ------------ + | PetId | PetName | PetType | Row_Number | + ------- + --------- + --------- + ------------ + | 1 | Wag | Con chó | 2 || 4 | Vỏ cây | Con chó | 2 || 4 | Vỏ cây | Con chó | 3 | + ------- + --------- + --------- + ------------ + 

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách TO_SECONDS () hoạt động trong MariaDB

  2. Cách MariaDB đạt được quy mô toàn cầu với Xpand

  3. Cách REGEXP_REPLACE () hoạt động trong MariaDB

  4. Cách DATE_SUB () hoạt động trong MariaDB

  5. Cách COT () hoạt động trong MariaDB