Tìm giá trị xuất hiện nhiều nhất trong MySQL với GROUP BY và HAVING
Khi cần tìm bản ghi có tần suất xuất hiện cao nhất trong một cột, chúng ta kết hợp GROUP BY với mệnh đề HAVING và truy vấn con.
1. Tạo bảng và chèn dữ liệu
mysql> CREATE TABLE DemoTable (
Value INT
);
Chèn 11 bản ghi (có giá trị lặp lại):
mysql> INSERT INTO DemoTable VALUES (88), (88), (88), (99), (99), (99), (99), (100), (100), (88), (88);
2. Xem dữ liệu
mysql> SELECT * FROM DemoTable;
Kết quả:
+-------+ | Value | +-------+ | 88 | | 88 | | 88 | | 99 | | 99 | | 99 | | 99 | | 100 | | 100 | | 88 | | 88 | +-------+
3. Truy vấn tìm giá trị có số lượng lớn nhất
mysql> SELECT Value, COUNT(*) AS NumberOfCount
FROM DemoTable
GROUP BY Value
HAVING COUNT(*) = (
SELECT COUNT(*) AS NumberOfCount
FROM DemoTable
GROUP BY Value
ORDER BY NumberOfCount DESC
LIMIT 1
);
4. Kết quả
+-------+---------------+ | Value | NumberOfCount | +-------+---------------+ | 88 | 5 | +-------+---------------+
Giải thích: Giá trị 88 xuất hiện 5 lần (nhiều nhất), 99 xuất hiện 4 lần, 100 xuất hiện 2 lần. Truy vấn con tìm số lượng lớn nhất (5), sau đó HAVING lọc nhóm có count bằng giá trị đó.