MySQL में GROUP BY, COUNT और LIMIT का उपयोग करके शीर्ष आवृत्ति वाली प्रविष्टियाँ खोजना
डुप्लिकेट मान वाली टेबल से सबसे अधिक बार आने वाली प्रविष्टियाँ खोजने के लिए GROUP BY, COUNT(), ORDER BY और LIMIT का संयोजन उपयोग करें।
उदाहरण के साथ पूर्ण कार्यान्वयन
टेबल बनाना
mysql> CREATE TABLE DemoTable610 (SubjectName VARCHAR(100));
रिकॉर्ड डालना (डुप्लिकेट के साथ)
mysql> INSERT INTO DemoTable610 VALUES
('MySQL'), ('Java'), ('MySQL'), ('MongoDB'), ('MySQL'), ('MySQL'),
('Java'), ('MongoDB'), ('C'), ('C++'), ('MongoDB'), ('MySQL'),
('Java'), ('Python'), ('MySQL');
सभी रिकॉर्ड देखना
mysql> SELECT * FROM DemoTable610;
आउटपुट: 15 पंक्तियाँ (MySQL: 6, Java: 3, MongoDB: 3, C: 1, C++: 1, Python: 1)
शीर्ष 2 सबसे अधिक घटित होने वाली प्रविष्टियाँ
mysql> SELECT SubjectName FROM (
SELECT SubjectName
FROM DemoTable610
GROUP BY SubjectName
ORDER BY COUNT(SubjectName) DESC
LIMIT 2
) AS tbl ORDER BY SubjectName;
आउटपुट:
+-------------+
| SubjectName |
+-------------+
| Java |
| MySQL |
+-------------+
2 rows in set (0.04 sec)
चरण-दर-चरण व्याख्या:
GROUP BY SubjectName- प्रत्येक विषय के लिए समूह बनाता हैCOUNT(SubjectName)- प्रत्येक समूह की घटनाएँ गिनता हैORDER BY COUNT(...) DESC- घटती क्रम में क्रमबद्ध करता हैLIMIT 2- शीर्ष 2 लेता है- बाहरी क्वेरी:
ORDER BY SubjectName- वर्णानुक्रम में क्रमबद्ध करता है
गिनती के साथ परिणाम देखने के लिए
SELECT SubjectName, COUNT(*) AS frequency
FROM DemoTable610
GROUP BY SubjectName
ORDER BY frequency DESC, SubjectName
LIMIT 2;
आउटपुट:
+-------------+-----------+
| SubjectName | frequency |
+-------------+-----------+
| MySQL | 6 |
| Java | 3 |
+-------------+-----------+
टाई (बराबरी) होने पर
यदि तीसरे स्थान पर भी समान गिनती हो, तो LIMIT 2 मनमाने ढंग से 2 चुनेगा। सभी टाई शामिल करने के लिए:
SELECT SubjectName, COUNT(*) AS freq
FROM DemoTable610
GROUP BY SubjectName
HAVING freq >= (
SELECT COUNT(*) AS freq2
FROM DemoTable610
GROUP BY SubjectName
ORDER BY freq2 DESC
LIMIT 1 OFFSET 1
);
विंडो फ़ंक्शन (MySQL 8.0+)
SELECT SubjectName, freq
FROM (
SELECT SubjectName, COUNT(*) AS freq,
RANK() OVER (ORDER BY COUNT(*) DESC) AS rnk
FROM DemoTable610
GROUP BY SubjectName
) t
WHERE rnk <= 2;