में COUNT() मानों के आधार पर सीमित समूह द्वारा मैं एक mySQL डेटाबेस में ईवेंट लॉगिंग कर रहा हूं और निगरानी उद्देश्यों के लिए शीर्ष 3 ईवेंट प्राप्त करना चाहता हूं।mySQL
मेरे तालिका eventlog
इस तरह दिखता है:
+----+------------------+---------------------+
| 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 |
+----+------------------+---------------------+
क्वेरी अंत में निम्नलिखित लौटना चाहिए, पकड़े
- शीर्ष 3 घटनाओं है कि अक्सर सबसे हुआ (स्तंभ
eventcount
कि उत्पन्न होता है के आधार पर mySQL केCOUNT()
फ़ंक्शन द्वारा), उनकेeventname
- द्वारा केवल 2 पंक्तियां जहां
eventcount
= 1, लेकिन केवल तभी 1 शीर्ष 3 के भीतर हैवांछित परिणाम की
उदाहरण के लिए, उपरोक्त तालिका के आधार पर (के बाद से वहाँ की घटनाओं है कि बस एक बार होते हैं और इसलिए मेरी दृश्यपटल ओवरलोड हैं की एक बहुत कुछ कर रहे हैं):
+------------+------------------+
| eventcount | eventname |
+------------+------------------+
| 3 | machine1.started |
| 2 | machine1.stopped |
| 2 | cluster.alive |
| 1 | machine0.started |
| 1 | machine2.started |
+------------+------------------+
कृपया ध्यान दें कि मुझे केवल 3 लौटाई पंक्तियों की आवश्यकता नहीं है, लेकिन 3 उच्चतम eventcount
एस के साथ पंक्तियां हैं।
मैंने एकाधिक चयन और संदिग्ध CASE ... WHEN
स्थितियों सहित नीचे क्वेरी स्ट्रिंग के साथ गड़बड़ करके बहुत प्रयोग किया, लेकिन मुझे जिस तरह से आवश्यकता है, उसे काम करने में सक्षम नहीं था।
SELECT COUNT(id) AS 'eventcount', eventname
FROM eventlog
GROUP BY eventname
ORDER BY eventcount DESC;
वांछित परिणाम प्राप्त करने के लिए सबसे अच्छा तरीका क्या है?
@RiggsFolly नहीं, यह नहीं होगा। नमूना डेटा के वांछित परिणाम में 5 पंक्तियां – Lamak
@ लामक गुड प्वाइंट – RiggsFolly