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

Đếm ID trùng lặp và hiển thị kết quả trong cột riêng với MySQL

Để đếm số lần xuất hiện của mỗi giá trị ID (hoặc nhóm giá trị) và hiển thị số lượng đó như một cột riêng, MySQL sử dụng GROUP BY kết hợp với hàm tập hợp COUNT() hoặc COUNT(DISTINCT ...).

Ví dụ minh họa

Tạo bảng đánh giá khách hàng:

mysql> CREATE TABLE DemoTable1453 (
    CustomerId INT,
    CustomerReviewNumber INT
);

Chèn dữ liệu (CustomerId 10, 11, 13 lặp lại nhiều lần):

mysql> INSERT INTO DemoTable1453 VALUES (10, 4);
mysql> INSERT INTO DemoTable1453 VALUES (10, 4);
mysql> INSERT INTO DemoTable1453 VALUES (11, 5);
mysql> INSERT INTO DemoTable1453 VALUES (11, 5);
mysql> INSERT INTO DemoTable1453 VALUES (11, 5);
mysql> INSERT INTO DemoTable1453 VALUES (13, 2);
mysql> INSERT INTO DemoTable1453 VALUES (11, 5);
mysql> INSERT INTO DemoTable1453 VALUES (10, 4);
mysql> INSERT INTO DemoTable1453 VALUES (13, 2);

Dữ liệu (9 hàng):

mysql> SELECT * FROM DemoTable1453;
+------------+----------------------+
| CustomerId | CustomerReviewNumber |
+------------+----------------------+
|         10 |                    4 |
|         10 |                    4 |
|         11 |                    5 |
|         11 |                    5 |
|         11 |                    5 |
|         13 |                    2 |
|         11 |                    5 |
|         10 |                    4 |
|         13 |                    2 |
+------------+----------------------+

Đếm số ReviewNumber DISTINCT cho mỗi CustomerId

mysql> SELECT CustomerId, 
    COUNT(DISTINCT CustomerReviewNumber) 
    FROM DemoTable1453 
    GROUP BY CustomerId;

Kết quả (mỗi CustomerId chỉ có 1 ReviewNumber duy nhất):

+------------+--------------------------------------+
| CustomerId | count(distinct CustomerReviewNumber) |
+------------+--------------------------------------+
|         10 |                                    1 |
|         11 |                                    1 |
|         13 |                                    1 |
+------------+--------------------------------------+

Các biến thể đếm thường dùng

Cú phápÝ nghĩaKết quả ví dụ (CustomerId=10)
COUNT(*)Số hàng (kể trùng lặp hoàn toàn)3
COUNT(CustomerReviewNumber)Số hàng có ReviewNumber không NULL3
COUNT(DISTINCT CustomerReviewNumber)Số giá trị ReviewNumber khác nhau1

Mở rộng: Hiển thị cả số hàng tổng và số giá trị distinct

SELECT 
    CustomerId,
    COUNT(*) AS TotalRows,
    COUNT(DISTINCT CustomerReviewNumber) AS DistinctReviewNumbers
FROM DemoTable1453
GROUP BY CustomerId;
+------------+-----------+-----------------------+
| CustomerId | TotalRows | DistinctReviewNumbers |
+------------+-----------+-----------------------+
|         10 |         3 |                     1 |
|         11 |         4 |                     1 |
|         13 |         2 |                     1 |
+------------+-----------+-----------------------+

Ứng dụng thực tế

  • Phát hiện dữ liệu trùng lặp: HAVING COUNT(*) > 1.
  • Thống kê tần suất: Số đơn hàng / khách, số lượt xem / bài viết.
  • Phân tích độ đa dạng: Số sản phẩm khác nhau / đơn hàng.