कंडीशनल ORDER BY: जीरो वैल्यू अंत में
किसी कॉलम को सॉर्ट करते समय खास मान (जैसे 0) को अंत में रखने और बाकी को नॉर्मल ऑर्डर में रखने के लिए बूलियन एक्सप्रेशन का उपयोग करें।
सिंटैक्स
SELECT * FROM yourTableName ORDER BY yourColumnName = 0, yourColumnName;
टेबल बनाना और डेटा इन्सर्ट करना
CREATE TABLE DemoTable1348 (Amount INT); INSERT INTO DemoTable1348 VALUES(100); INSERT INTO DemoTable1348 VALUES(0); INSERT INTO DemoTable1348 VALUES(90); INSERT INTO DemoTable1348 VALUES(45); INSERT INTO DemoTable1348 VALUES(0); INSERT INTO DemoTable1348 VALUES(89);
मौजूदा डेटा
+--------+ | Amount | +--------+ | 100 | | 0 | | 90 | | 45 | | 0 | | 89 | +--------+
क्वेरी: 0 को अंत में, बाकी आरोही क्रम में
SELECT * FROM DemoTable1348 ORDER BY Amount = 0, Amount;
आउटपुट
+--------+ | Amount | +--------+ | 45 | | 89 | | 90 | | 100 | | 0 | | 0 | +--------+
कैसे काम करता है
Amount = 0बूलियन एक्सप्रेशन है: TRUE (1) या FALSE (0)- FALSE (0) पहले आता है, TRUE (1) बाद में
- तो नॉन-जीरो वैल्यू (FALSE=0) पहले सॉर्ट होते हैं
- फिर
Amountसे आरोही क्रम में
विविधताएं
NULL को अंत में रखना
ORDER BY (ColumnName IS NULL), ColumnName
कई शर्तें
ORDER BY
CASE
WHEN Status = 'URGENT' THEN 1
WHEN Status = 'HIGH' THEN 2
WHEN Status = 'NORMAL' THEN 3
ELSE 4
END,
CreatedDate DESC;
डिसेंडिंग में नॉन-जीरो, फिर जीरो
ORDER BY Amount = 0, Amount DESC;
+--------+ | Amount | +--------+ | 100 | | 90 | | 89 | | 45 | | 0 | | 0 | +--------+
प्रदर्शन नोट
बूलियन एक्सप्रेशन इंडेक्स उपयोग को रोक सकता है। बड़े डेटासेट के लिए UNION ALL दृष्टिकोण बेहतर हो सकता है:
(SELECT * FROM DemoTable1348 WHERE Amount != 0 ORDER BY Amount) UNION ALL (SELECT * FROM DemoTable1348 WHERE Amount = 0);