आपको SELECT स्टेटमेंट के साथ सबक्वेरी का उपयोग करने की आवश्यकता है, एक आंतरिक के लिए और एक बाहरी के लिए। आंतरिक सेलेक्ट पंक्तियाँ लौटाएगा और बाहरी आरोही क्रम में ऑर्डर करेगा। सिंटैक्स इस प्रकार है:
SELECT * FROM (
SELECT * FROM yourTableName ORDER BY yourColumnName1 DESC LIMIT 9
) AS anyAliasName ORDER BY yourColumnName2;
उपरोक्त सिंटैक्स को समझने के लिए, आइए एक टेबल बनाते हैं। टेबल बनाने की क्वेरी इस प्रकार है:
mysql> create table OrderByAfterLimit -> ( -> Id int NOT NULL AUTO_INCREMENT, -> UserName varchar(20), -> UserAge int, -> PRIMARY KEY(Id) -> ); Query OK, 0 rows affected (0.69 sec)
अब आप insert कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड्स डाल सकते हैं। क्वेरी इस प्रकार है:
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('John',23);
Query OK, 1 row affected (0.24 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Larry',21);
Query OK, 1 row affected (0.36 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Bob',26);
Query OK, 1 row affected (0.19 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('James',22);
Query OK, 1 row affected (0.18 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Robert',28);
Query OK, 1 row affected (0.20 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Mike',29);
Query OK, 1 row affected (0.19 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Carol',24);
Query OK, 1 row affected (0.13 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('David',20);
Query OK, 1 row affected (0.23 sec)
mysql> insert into OrderByAfterLimit(UserName, UserAge) values('Maxwell',30);
Query OK, 1 row affected (0.46 sec)
select स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड्स प्रदर्शित करें। क्वेरी इस प्रकार है:
mysql> select *from OrderByAfterLimit;
निम्नलिखित आउटपुट है:
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 1 | John | 23 | | 2 | Larry | 21 | | 3 | Bob | 26 | | 4 | James | 22 | | 5 | Robert | 28 | | 6 | Mike | 29 | | 7 | Carol | 24 | | 8 | David | 20 | | 9 | Maxwell | 30 | +----+----------+---------+ 9 rows in set (0.00 sec)
LIMIT के बाद ORDER BY की क्वेरी यहां है:
mysql> select *from -> ( -> select *from OrderByAfterLimit order by UserAge DESC LIMIT 9) AS tbl1 -> order by UserName;
निम्नलिखित आउटपुट है:
+----+----------+---------+ | Id | UserName | UserAge | +----+----------+---------+ | 3 | Bob | 26 | | 7 | Carol | 24 | | 8 | David | 20 | | 4 | James | 22 | | 1 | John | 23 | | 2 | Larry | 21 | | 9 | Maxwell | 30 | | 6 | Mike | 29 | | 5 | Robert | 28 | +----+----------+---------+ 9 rows in set (0.00 sec)
व्याख्या: आंतरिक क्वेरीUserAgeके अनुसार अवरोही क्रम में शीर्ष 9 पंक्तियाँ चुनती है (यहां सभी 9 क्योंकि टेबल में केवल 9 पंक्तियाँ हैं)। बाहरी क्वेरी उन 9 पंक्तियों कोUserNameके अनुसार आरोही क्रम में पुनः क्रमबद्ध करती है। इसे "टॉप-N फिर क्रमबद्ध करें" पैटर्न के रूप में जाना जाता है।