Sử dụng COUNT(DISTINCT column_name) để đếm số giá trị duy nhất trong một cột.
Cú pháp
SELECT COUNT(DISTINCT column_name) AS distinct_count FROM table_name;
Ví dụ minh họa
mysql> CREATE TABLE DistinctDemo (Name VARCHAR(200));
Query OK, 0 rows affected (0.58 sec)
mysql> INSERT INTO DistinctDemo VALUES
('John'), ('Sam'), ('John'), ('Johnson'), ('John'), ('Johnson'), ('Sam'), ('Johnson');
Query OK, 8 rows affected
Dữ liệu (có trùng):
+---------+ | Name | +---------+ | John | | Sam | | John | | Johnson | | John | | Johnson | | Sam | | Johnson | +---------+
Đếm distinct:
mysql> SELECT COUNT(DISTINCT Name) AS DistinctValues FROM DistinctDemo;
Kết quả:
+----------------+ | DistinctValues | +----------------+ | 3 | +----------------+
3 giá trị duy nhất: John, Sam, Johnson.
Các biến thể hữu ích
Đếm distinct trên nhiều cột (tổ hợp):
SELECT COUNT(DISTINCT col1, col2) FROM table_name;
Liệt kê các giá trị distinct:
SELECT DISTINCT Name FROM DistinctDemo;
Đếm distinct có điều kiện:
SELECT COUNT(DISTINCT Name) FROM DistinctDemo WHERE Name LIKE 'J%';
Hiệu năng
COUNT(DISTINCT ...)cần quét toàn bộ dữ liệu (full scan) trừ khi có index phù hợp.- Với bảng lớn, cân nhắc
APPROX_COUNT_DISTINCT()(MySQL 8.0.3+) để ước lượng nhanh. - Index trên cột được COUNT DISTINCT giúp tăng tốc đáng kể.