Tôi đang ghi sự kiện vào cơ sở dữ liệu mySQL và muốn nhận được 3 sự kiện hàng đầu cho mục đích giám sát.Giới hạn GROUP BY dựa trên giá trị COUNT() trong mySQL
bảng My eventlog
trông như thế này:
+----+------------------+---------------------+
| id | eventname | eventdate |
+----+------------------+---------------------+
| 0 | machine1.started | 2016-09-04 19:22:23 |
| 1 | machine2.reboot | 2016-09-04 20:23:11 |
| 2 | machine1.stopped | 2016-09-04 20:24:12 |
| 3 | machine1.started | 2016-09-04 20:25:12 |
| 4 | machine1.stopped | 2016-09-04 23:23:16 |
| 5 | machine0.started | 2016-09-04 23:24:00 |
| 6 | machine1.started | 2016-09-04 23:24:16 |
| 7 | machine3.started | 2016-09-04 23:25:00 |
| 8 | machine4.started | 2016-09-04 23:26:00 |
| 9 | cluster.alive | 2016-09-04 23:30:00 |
| 10 | cluster.alive | 2016-09-05 11:30:00 |
+----+------------------+---------------------+
Truy vấn cuối cùng nên trở về sau, giữ
- 3 sự kiện hàng đầu đã xảy ra hầu hết thường (dựa trên cột
eventcount
s được tạo bởi chức năngCOUNT()
của mySQL), được nhóm theoeventname
- chỉ 2 hàng có
eventcount
= 1, nhưng chỉ khi 1 nằm trong top 3eventcounts
(vì có rất nhiều sự kiện xảy ra chỉ một lần và do đó sẽ quá tải frontend của tôi)
Ví dụ về kết quả mong muốn, dựa trên bảng trên:
+------------+------------------+
| eventcount | eventname |
+------------+------------------+
| 3 | machine1.started |
| 2 | machine1.stopped |
| 2 | cluster.alive |
| 1 | machine0.started |
| 1 | machine2.started |
+------------+------------------+
Xin lưu ý rằng Tôi không chỉ cần 3 hàng trả lại mà là các hàng có 3 số cao nhất là eventcount
s.
Tôi đã làm rất nhiều thử nghiệm bằng cách xáo trộn chuỗi truy vấn bên dưới, bao gồm nhiều lựa chọn và các điều kiện có điều kiện CASE ... WHEN
, nhưng không thể làm cho nó hoạt động theo cách tôi cần.
SELECT COUNT(id) AS 'eventcount', eventname
FROM eventlog
GROUP BY eventname
ORDER BY eventcount DESC;
Cách tiếp cận tốt nhất để đạt được kết quả mong muốn theo cách hiệu quả là gì?
@RiggsKhông, không. Kết quả mong muốn cho dữ liệu mẫu có 5 hàng – Lamak
@Lamak Điểm tốt – RiggsFolly