इसके लिए ORDER BY IF() का उपयोग करें।
आइए पहले एक टेबल बनाते हैं:
mysql> create table DemoTable801 ( Score int ); Query OK, 0 rows affected (0.69 sec)
इन्सर्ट कमांड का उपयोग करके टेबल में कुछ रिकॉर्ड डालें:
mysql> insert into DemoTable801 values(30); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable801 values(99); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable801 values(45); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable801 values(55); Query OK, 1 row affected (0.16 sec) mysql> insert into DemoTable801 values(99); Query OK, 1 row affected (0.19 sec) mysql> insert into DemoTable801 values(69); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable801 values(25); Query OK, 1 row affected (0.20 sec) mysql> insert into DemoTable801 values(79); Query OK, 1 row affected (0.12 sec)
सेलेक्ट स्टेटमेंट का उपयोग करके टेबल से सभी रिकॉर्ड प्रदर्शित करें:
mysql> select * from DemoTable801;
यह निम्नलिखिक आउटपुट देगा:
+-------+ | Score | +-------+ | 30 | | 99 | | 45 | | 55 | | 99 | | 69 | | 25 | | 79 | +-------+ 8 rows in set (0.00 sec)
एक ही फ़ील्ड पर कस्टम सॉर्ट ऑर्डर लागू करने की क्वेरी
mysql> select * from DemoTable801 order by if(Score=99,1,0), Score;
यह निम्नलिखिक आउटपुट देगा:
+-------+ | Score | +-------+ | 25 | | 30 | | 45 | | 55 | | 69 | | 79 | | 99 | | 99 | +-------+ 8 rows in set (0.00 sec)
व्याख्या
IF(Score=99, 1, 0)स्कोर 99 के लिए 1, अन्यथा 0 लौटाता हैORDER BY IF(...), Scoreपहले IF परिणाम द्वारा सॉर्ट करता है (0 पहले, फिर 1), फिर Score द्वारा- इसलिए 99 वाले अंत में आते हैं, बाकी आरोही क्रम में
- यह "विशिष्ट मानों को अंत में या शुरुआत में रखने" के लिए उपयोगी है
अधिक जटिल कस्टम ऑर्डर
ORDER BY CASE WHEN Score = 99 THEN 3 WHEN Score > 80 THEN 2 WHEN Score > 50 THEN 1 ELSE 0 END, Score;
यह स्कोर को श्रेणियों में समूहित करता है: 99 पहले, फिर 80+, फिर 50+, फिर बाकी।