CASE WHEN ... IN() के साथ कस्टम ऑर्डरिंग
ग्रुप्ड फील्ड्स को कस्टम ऑर्डर में सॉर्ट करने के लिए ORDER BY CASE के साथ IN() का उपयोग करें। CASE विभिन्न शर्तों का मूल्यांकन करता है जबकि ORDER BY मानों को आरोही/अवरोही क्रम में सॉर्ट करता है।
आइए पहले एक टेबल बनाते हैं:
mysql> CREATE TABLE DemoTable (
Value VARCHAR(40)
);
रिकॉर्ड्स इन्सर्ट करें:
mysql> INSERT INTO DemoTable VALUES ('John');
mysql> INSERT INTO DemoTable VALUES ('100&101');
mysql> INSERT INTO DemoTable VALUES ('Sam');
mysql> INSERT INTO DemoTable VALUES ('90');
mysql> INSERT INTO DemoTable VALUES ('Mike45');
सभी रिकॉर्ड्स देखें:
mysql> SELECT * FROM DemoTable;
आउटपुट:
+---------+ | Value | +---------+ | John | | 100&101 | | Sam | | 90 | | Mike45 | +---------+
कस्टम ऑर्डर में ग्रुप्ड फील्ड्स ऑर्डर करने के लिए क्वेरी:
mysql> SELECT * FROM DemoTable
ORDER BY CASE
WHEN Value IN ('John', 'Sam', 'Mike45') THEN 100
WHEN Value = '90' THEN 101
WHEN Value = '100&101' THEN 102
ELSE 103
END;
आउटपुट:
+---------+ | Value | +---------+ | John | | Sam | | Mike45 | | 90 | | 100&101 | +---------+
व्याख्या:
- CASE WHEN ... THEN ... END: प्रत्येक मान के लिए सॉर्ट की (संख्या) असाइन करता है
- IN ('John', 'Sam', 'Mike45'): इन तीनों मानों को प्राथमिकता 100 देता है
- Value = '90': प्राथमिकता 101
- Value = '100&101': प्राथमिकता 102
- ELSE 103: अन्य सभी मान (यहां कोई नहीं)
- ORDER BY: असाइन की गई संख्याओं के आरोही क्रम में सॉर्ट करता है (100, 101, 102, 103)
उसी प्राथमिकता वाले मानों का क्रम: एक ही THEN मान (100) वाले John, Sam, Mike45 का क्रम अनिर्दिष्ट है (आमतौर पर इन्सर्शन ऑर्डर)। द्वितीयक सॉर्ट के लिए:
ORDER BY CASE ... END, Value;
FIELD() फंक्शन (सरल विकल्प):
ORDER BY FIELD(Value, 'John', 'Sam', 'Mike45', '90', '100&101');
FIELD() सूची में मान की पोजीशन लौटाता है (नहीं मिलने पर 0), जो स्वचालित रूप से सही क्रम देता है।