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

Đếm các mặt hàng khác nhau trong một truy vấn MySQL với COUNT DISTINCT

Đếm số lượng giá trị duy nhất (distinct) trong MySQL

Sử dụng COUNT(DISTINCT column) để đếm số giá trị khác nhau của một cột trong nhóm hoặc toàn bảng.

1. Tạo bảng và chèn dữ liệu

mysql> CREATE TABLE DemoTable (
    CustomerId INT,
    CustomerName VARCHAR(20),
    ProductName VARCHAR(40)
);
mysql> INSERT INTO DemoTable VALUES
    (101, 'Chris', 'Product-1'), (102, 'David', 'Product-2'),
    (101, 'Chris', 'Product-1'), (101, 'Chris', 'Product-2'),
    (101, 'Chris', 'Product-1');

2. Xem dữ liệu

mysql> SELECT * FROM DemoTable;
+------------+--------------+-------------+
| CustomerId | CustomerName | ProductName |
+------------+--------------+-------------+
| 101        | Chris        | Product-1   |
| 102        | David        | Product-2   |
| 101        | Chris        | Product-1   |
| 101        | Chris        | Product-2   |
| 101        | Chris        | Product-1   |
+------------+--------------+-------------+

3. Truy vấn: Đếm sản phẩm khác nhau của CustomerId = 101

mysql> SELECT COUNT(DISTINCT ProductName)
    FROM DemoTable
    WHERE CustomerId = 101;

4. Kết quả

+-----------------------------+
| COUNT(DISTINCT ProductName) |
+-----------------------------+
| 2                           |
+-----------------------------+

Phân tích: CustomerId=101 (Chris) có 4 hàng: Product-1 (3 lần), Product-2 (1 lần) → 2 sản phẩm khác nhau.

So sánh COUNT(*) vs COUNT(col) vs COUNT(DISTINCT col):

HàmĐếm gìNULLTrùng lặp
COUNT(*)Số hàngĐếmĐếm tất cả
COUNT(col)Số giá trị không NULLBỏ quaĐếm tất cả
COUNT(DISTINCT col)Số giá trị KHÁC NHAU không NULLBỏ quaChỉ đếm 1 lần

Mở rộng - Đếm distinct cho nhiều cột:

SELECT COUNT(DISTINCT ProductName) AS products,
       COUNT(DISTINCT CustomerName) AS customers
FROM DemoTable;

Lưu ý hiệu năng: COUNT(DISTINCT) tốn bộ nhớ (cần lưu tập giá trị duy nhất). Với bảng lớn, cân nhắc approximate count: APPROX_COUNT_DISTINCT() (MySQL 8.0.13+).