Đếm số lần xuất hiện của mỗi tên với GROUP BY và COUNT()
Sử dụng GROUP BY Name chia dữ liệu thành các nhóm theo tên, sau đó COUNT(Name) hoặc COUNT(*) đếm số hàng trong mỗi nhóm.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (Name VARCHAR(30));
mysql> INSERT INTO DemoTable VALUES
('Chris'), ('Robert'), ('Mike'), ('Robert'), ('Mike'), ('David');
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
+--------+ | Name | +--------+ | Chris | | Robert | | Mike | | Robert | | Mike | | David | +--------+
3. Truy vấn: Nhóm theo Name, đếm số hàng
mysql> SELECT Name, COUNT(Name) AS NumberOfRowsPerName
FROM DemoTable
GROUP BY Name;
4. Kết quả
+--------+---------------------+ | Name | NumberOfRowsPerName | +--------+---------------------+ | Chris | 1 | | Robert | 2 | | Mike | 2 | | David | 1 | +--------+---------------------+
Giải thích:
- Chris: 1 hàng
- Robert: 2 hàng
- Mike: 2 hàng
- David: 1 hàng
COUNT(Name) vs COUNT(*): Với cột NOT NULL thì giống nhau. Nếu cột có NULL: COUNT(Name) bỏ qua NULL, COUNT(*) đếm tất cả hàng. Khuyến nghị COUNT(*) cho rõ ràng.
Mở rộng - Sắp xếp theo số lượng giảm dần:
SELECT Name, COUNT(*) AS cnt FROM DemoTable GROUP BY Name ORDER BY cnt DESC, Name;
+--------+-----+ | Name | cnt | +--------+-----+ | Mike | 2 | | Robert | 2 | | Chris | 1 | | David | 1 | +--------+-----+
Ứng dụng: Thống kê tần suất, tìm duplicate, báo cáo top N, phân tích phân bố dữ liệu.