Sử dụng COUNT(DISTINCT column_name) để đếm số giá trị duy nhất (bỏ qua trùng lặp) trong một cột.
Tạo bảng
mysql> CREATE TABLE DemoTable (
-> Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> FirstName VARCHAR(10)
-> );
Chèn dữ liệu có trùng lặp
mysql> INSERT INTO DemoTable(FirstName) VALUES('Larry');
mysql> INSERT INTO DemoTable(FirstName) VALUES('John');
mysql> INSERT INTO DemoTable(FirstName) VALUES('Sam');
mysql> INSERT INTO DemoTable(FirstName) VALUES('John');
mysql> INSERT INTO DemoTable(FirstName) VALUES('John');
mysql> INSERT INTO DemoTable(FirstName) VALUES('Larry');
mysql> INSERT INTO DemoTable(FirstName) VALUES('Mike');
mysql> INSERT INTO DemoTable(FirstName) VALUES('Robert');
mysql> INSERT INTO DemoTable(FirstName) VALUES('Carol');
mysql> INSERT INTO DemoTable(FirstName) VALUES('Mike');
Xem dữ liệu (10 hàng, 6 tên duy nhất)
mysql> SELECT * FROM DemoTable;
+----+-----------+ | Id | FirstName | +----+-----------+ | 1 | Larry | | 2 | John | | 3 | Sam | | 4 | John | | 5 | John | | 6 | Larry | | 7 | Mike | | 8 | Robert | | 9 | Carol | | 10 | Mike | +----+-----------+
Đếm tên duy nhất
mysql> SELECT COUNT(DISTINCT FirstName) FROM DemoTable;
+---------------------------+ | COUNT(DISTINCT FirstName) | +---------------------------+ | 6 | +---------------------------+
So sánh COUNT() vs COUNT(DISTINCT)
| Hàm | Kết quả | Ý nghĩa |
|---|---|---|
| COUNT(FirstName) | 10 | Tổng số hàng (kể cả NULL? không, COUNT(cột) bỏ NULL) |
| COUNT(DISTINCT FirstName) | 6 | Số giá trị khác nhau: Larry, John, Sam, Mike, Robert, Carol |
| COUNT(*) | 10 | Tổng số hàng (kể cả NULL) |
Mở rộng: Liệt kê các giá trị duy nhất và số lần xuất hiện
SELECT FirstName, COUNT(*) AS Frequency FROM DemoTable GROUP BY FirstName ORDER BY Frequency DESC;