CASE एक्सप्रेशन के साथ कस्टम ऑर्डरिंग
विशिष्ट मानों को परिणाम सेट में पहले दिखाने के लिए ORDER BY CASE WHEN ... THEN ... ELSE ... END पैटर्न का उपयोग करें।
उदाहरण: टेबल बनाना और डेटा इन्सर्ट करना
mysql> CREATE TABLE DemoTable808(Value VARCHAR(100)); Query OK, 0 rows affected (0.61 sec)
रिकॉर्ड्स इन्सर्ट करना
mysql> INSERT INTO DemoTable808 VALUES('smith'),('Adamsmith'),('Carolsmith'),('smithJohn');
Query OK, 4 rows affected (...)
सभी रिकॉर्ड्स देखना
mysql> SELECT * FROM DemoTable808;
+------------+ | Value | +------------+ | smith | | Adamsmith | | Carolsmith | | smithJohn | +------------+ 4 rows in set (0.00 sec)
'smith' से शुरू होने वाले मान पहले क्रमबद्ध करना
mysql> SELECT * FROM DemoTable808
ORDER BY CASE WHEN Value LIKE 'smith%' THEN 0 ELSE 1 END ASC, Value ASC;
परिणाम
+------------+ | Value | +------------+ | smith | | smithJohn | | Adamsmith | | Carolsmith | +------------+ 4 rows in set (0.00 sec)
क्वेरी व्याख्या
CASE WHEN Value LIKE 'smith%' THEN 0 ELSE 1 END- 'smith%' से शुरू होने वालों को 0 (पहले), बाकी को 1 (बाद में) असाइन करता हैASC- 0 पहले आता हैValue ASC- प्रत्येक ग्रुप के भीतर वर्णमाला क्रम
अल्टरनेटिव: FIELD() फंक्शन
विशिष्ट मानों की सूची के लिए कस्टम क्रम:
SELECT * FROM DemoTable808 ORDER BY FIELD(Value, 'smith', 'smithJohn', 'Adamsmith', 'Carolsmith');
FIELD() फंक्शन विवरण
FIELD(str, str1, str2, str3, ...) -- str सूची में मिलने पर स्थिति (1-आधारित) लौटाता है, नहीं मिलने पर 0
उदाहरण: रंग क्रम
ORDER BY FIELD(Color, 'RED', 'GREEN', 'BLUE', 'ORANGE')
तुलना: CASE vs FIELD()
| पहलू | CASE WHEN | FIELD() |
|---|---|---|
| लचीलापन | जटिल शर्तें, रेंज, पैटर्न | केवल सटीक मान मिलान |
| पठनीयता | जटिल लॉजिक के लिए बेहतर | सरल सूचियों के लिए बेहतर |
| प्रदर्शन | समान | थोड़ा तेज (आंतरिक) |
| NULL हैंडलिंग | स्पष्ट नियंत्रण | NULL = 0 (अंत में) |
अन्य कस्टम ऑर्डरिंग पैटर्न
बूलियन एक्सप्रेशन (MySQL में TRUE=1, FALSE=0)
ORDER BY (Value = 'priority') DESC, Value ASC;
एकाधिक प्राथमिकता स्तर
ORDER BY
CASE
WHEN Value LIKE 'urgent%' THEN 1
WHEN Value LIKE 'high%' THEN 2
WHEN Value LIKE 'normal%' THEN 3
ELSE 4
END,
Value;
नोट
कस्टम ऑर्डरिंग इंडेक्स उपयोग को रोक सकता है। बड़े डेटासेट्स के लिए, एक sort_order कॉलम जोड़ने और उस पर इंडेक्स बनाने पर विचार करें।