सबक्वेरी के साथ WHERE क्लॉज का उपयोग करें
प्रत्येक ग्रुप से शीर्ष N पंक्तियाँ प्राप्त करने के लिए, एक सहसंबद्ध सबक्वेरी का उपयोग करें जो प्रत्येक पंक्ति के लिए गिनती करती है कि उस ग्रुप में उससे बड़े या बराबर मान वाली कितनी पंक्तियाँ हैं।
टेबल बनाना और डेटा डालना
mysql> CREATE TABLE selectTop2FromEachGroup (
Name VARCHAR(20),
TotalScores INT
);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('John', 32);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('John', 33);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('John', 34);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('Carol', 35);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('Carol', 36);
mysql> INSERT INTO selectTop2FromEachGroup VALUES('Carol', 37);
सभी रिकॉर्ड
+-------+-------------+ | Name | TotalScores | +-------+-------------+ | John | 32 | | John | 33 | | John | 34 | | Carol | 35 | | Carol | 36 | | Carol | 37 | +-------+-------------+
क्वेरी: प्रत्येक ग्रुप से शीर्ष 2 (उच्चतम स्कोर)
mysql> SELECT * FROM selectTop2FromEachGroup tbl
WHERE (
SELECT COUNT(*)
FROM selectTop2FromEachGroup tbl1
WHERE tbl1.Name = tbl.Name
AND tbl1.TotalScores >= tbl.TotalScores
) <= 2;
आउटपुट
+-------+-------------+ | Name | TotalScores | +-------+-------------+ | John | 33 | | John | 34 | | Carol | 36 | | Carol | 37 | +-------+-------------+
व्याख्या
- सबक्वेरी प्रत्येक पंक्ति के लिए गिनती करती है कि उसी नाम वाले ग्रुप में उससे अधिक या बराबर स्कोर वाली कितनी पंक्तियाँ हैं।
<= 2का अर्थ है शीर्ष 2 पंक्तियाँ (सबसे उच्च स्कोर वाली)।- निचले स्कोर वाली पंक्तियाँ (John का 32, Carol का 35) बाहर हो जाती हैं।
नोट
MySQL 8.0+ में, आप ROW_NUMBER() विंडो फंक्शन का उपयोग करके इसे अधिक कुशलता से कर सकते हैं।