Vấn đề: Thống kê tần suất từng giá trị trong cột
Cột Value có nhiều giá trị trùng lặp. Cần đếm số lần xuất hiện của mỗi giá trị.
Giải pháp: GROUP BY + COUNT(*)
Cú pháp chuẩn SQL: SELECT column, COUNT(*) FROM table GROUP BY column;
1. Tạo bảng và dữ liệu
CREATE TABLE DemoTable (Value INT);
INSERT INTO DemoTable VALUES (1), (2), (3), (2), (3), (3), (1);
2. Dữ liệu gốc
+-------+
| Value |
+-------+
| 1 |
| 2 |
| 3 |
| 2 |
| 3 |
| 3 |
| 1 |
+-------+
3. Truy vấn đếm
SELECT Value, COUNT(*) AS Frequency
FROM DemoTable
GROUP BY Value;
4. Kết quả
+-------+-----------+
| Value | Frequency |
+-------+-----------+
| 1 | 2 |
| 2 | 2 |
| 3 | 3 |
+-------+-----------+
Mở rộng: Sắp xếp theo tần suất giảm dần
SELECT Value, COUNT(*) AS Frequency
FROM DemoTable
GROUP BY Value
ORDER BY Frequency DESC;
Lưu ý
COUNT(*)đếm số hàng trong nhóm (kể cả NULL nếu cột cho phép NULL).COUNT(column)chỉ đếm hàng cócolumnkhông NULL.- Có index trên cột
Valuesẽ tăng tốc GROUP BY đáng kể. - MySQL 8.0+ có thể dùng
COUNT(*) OVER (PARTITION BY Value)để giữ nguyên chi tiết hàng và thêm cột tần suất.