MySQL में सबक्वेरी और ORDER BY: शीर्ष N रिकॉर्ड फिर द्वितीयक सॉर्ट
जब आपको पहले किसी कॉलम के आधार पर शीर्ष N रिकॉर्ड चुनने हों, फिर किसी अन्य कॉलम के आधार पर सॉर्ट करना हो, तो सबक्वेरी (उप-क्वेरी) का उपयोग करें।
उदाहरण: शीर्ष 3 स्कोर, फिर नाम के अनुसार A-Z
टेबल बनाएं:
CREATE TABLE DemoTable (
Name VARCHAR(40),
Score INT
);
INSERT INTO DemoTable VALUES
('Chris', 45), ('Bob', 98), ('David', 78), ('Mike', 96), ('Carol', 43);
डेटा:
+-------+-------+ | Name | Score | +-------+-------+ | Chris | 45 | | Bob | 98 | | David | 78 | | Mike | 96 | | Carol | 43 | +-------+-------+
क्वेरी: शीर्ष 3 स्कोर, फिर नाम से सॉर्ट
SELECT * FROM (
SELECT Name, Score
FROM DemoTable
ORDER BY Score DESC, Name ASC
LIMIT 3
) AS tbl
ORDER BY Name;
परिणाम:
+-------+-------+ | Name | Score | +-------+-------+ | Bob | 98 | | David | 78 | | Mike | 96 | +-------+-------+
चरण-दर-चरण व्याख्या
- आंतरिक क्वेरी:
ORDER BY Score DESC, Name ASC LIMIT 3— पहले स्कोर से अवरोही क्रम, टाई होने पर नाम से आरोही, फिर शीर्ष 3 - आंतरिक परिणाम: Bob (98), Mike (96), David (78)
- बाहरी क्वेरी:
ORDER BY Name— इन 3 को नाम से वर्णानुक्रम में सॉर्ट - अंतिम परिणाम: Bob, David, Mike
महत्वपूर्ण: LIMIT के बिना बाहरी ORDER BY
यदि आप बाहरी क्वेरी में भी LIMIT लगाएंगे, तो गलत परिणाम मिल सकते हैं। यहां केवल सॉर्टिंग के लिए बाहरी क्वेरी है।
MySQL 8.0+ में CTE का उपयोग
WITH Top3 AS (
SELECT Name, Score
FROM DemoTable
ORDER BY Score DESC, Name ASC
LIMIT 3
)
SELECT * FROM Top3 ORDER BY Name;
यह अधिक पठनीय और आधुनिक दृष्टिकोण है।