Để đếm số lượng giá trị duy nhất (distinct) cho mỗi nhóm trong MySQL, bạn kết hợp COUNT(DISTINCT column) với GROUP BY.
Ví dụ minh họa
Tạo bảng tin nhắn:
mysql> create table DemoTable (
UserName varchar(100),
UserPostMessage text
);
Chèn dữ liệu:
mysql> insert into DemoTable values('Chris','Hi');
mysql> insert into DemoTable values('David','Hello');
mysql> insert into DemoTable values('Chris','Awesome');
mysql> insert into DemoTable values('Chris','Amazing');
mysql> insert into DemoTable values('David','Nice Place');
mysql> insert into DemoTable values('Chris','Amazing');
Hiển thị dữ liệu (có trùng lặp tin nhắn "Amazing" của Chris):
mysql> select * from DemoTable;
Kết quả:
+----------+-----------------+ | UserName | UserPostMessage | +----------+-----------------+ | Chris | Hi | | David | Hello | | Chris | Awesome | | Chris | Amazing | | David | Nice Place | | Chris | Amazing | +----------+-----------------+
Truy vấn đếm tin nhắn duy nhất theo user
mysql> select UserName, count(DISTINCT UserPostMessage) AS NumberOfMessagesPostByUser from DemoTable group by UserName;
Kết quả:
+----------+----------------------------+ | UserName | NumberOfMessagesPostByUser | +----------+----------------------------+ | Chris | 3 | | David | 2 | +----------+----------------------------+
Giải thích:
GROUP BY UserName: Nhóm dữ liệu theo từng userCOUNT(DISTINCT UserPostMessage): Đếm số tin nhắn KHÔNG TRÙNG LẶP trong mỗi nhóm- Chris có 4 tin nhắn nhưng "Amazing" lặp 2 lần → chỉ đếm 3 tin nhắn duy nhất
Kỹ thuật này thường dùng để thống kê hoạt động người dùng, số lượng sản phẩm duy nhất mỗi đơn hàng, v.v.