SQL में, ORDER BY
क्लॉज आमतौर पर किसी क्वेरी के परिणामों को ऑर्डर करने के लिए उपयोग किया जाता है। यह आपको परिणामों को क्रमित करने के लिए एक या अधिक स्तंभों का चयन करने की अनुमति देता है, और अधिकांश मामलों में, शायद आपको बस यही चाहिए।
लेकिन क्या होगा अगर आपको एक अपवाद बनाने की ज़रूरत है?
क्या होगा यदि आप परिणामों को एक पंक्ति को छोड़कर वर्णानुक्रम में क्रमबद्ध करना चाहते हैं? या कई पंक्तियाँ?
या शायद आप गैर-नल परिणामों का आदेश देते समय किसी भी NULL मान को अंत तक रखना चाहते हैं।
किसी भी तरह से, एक साफ-सुथरी तरकीब है जिसका आप उपयोग कर सकते हैं जो आपको ऐसा करने में सक्षम बनाएगी। और अच्छी बात यह है कि यह आसान है।
आप CASE
. जोड़कर उपरोक्त सभी परिदृश्यों को पूरा कर सकते हैं आपके ORDER BY
. के लिए अभिव्यक्ति खंड।
उदाहरण 1 - "अन्य" को नीचे ले जाएं
मान लीजिए कि हम संगीत शैलियों वाली तालिका के विरुद्ध निम्न क्वेरी चलाते हैं।
SELECT Genre
FROM MusicGenres
ORDER BY Genre ASC;
परिणाम:
+---------+ | Genre | |---------| | Blues | | Country | | Hip Hop | | Jazz | | Metal | | Other | | Pop | | Rap | | Rock | +---------+
इस मामले में, हम परिणामों को Genre
. द्वारा क्रमित करते हैं स्तंभ, आरोही क्रम में।
यह एक बात को छोड़कर ठीक है। अन्य . नामक शैली . क्या यह अच्छा नहीं होगा यदि हम अन्य को स्थानांतरित कर सकें नीचे तक?
हम इसे CASE
. से हासिल कर सकते हैं अभिव्यक्ति। इसलिए, हम उपरोक्त क्वेरी ले सकते हैं, और इसके ORDER BY
. को संशोधित कर सकते हैं खंड इस प्रकार है।
SELECT Genre
FROM MusicGenres
ORDER BY
CASE Genre
WHEN 'Other' THEN 1
ELSE 0
END
ASC, Genre ASC;
परिणाम:
+---------+ | Genre | |---------| | Blues | | Country | | Hip Hop | | Jazz | | Metal | | Pop | | Rap | | Rock | | Other | +---------+
उदाहरण 2 - NULLs को नीचे ले जाएं
यदि आपकी तालिका में उनमें से कोई भी pesky NULL मान होता है, तो आप पाएंगे कि जब आप आरोही क्रम में ऑर्डर करेंगे तो वे शीर्ष पर रहने पर जोर देंगे।
एक बार फिर, CASE
बचाव के लिए अभिव्यक्ति!
आइए कल्पना करें कि उपरोक्त तालिका में कुछ NULL मान हैं। और जब हम अपनी क्वेरी चलाते हैं, तो यह कुछ इस तरह दिखता है:
SELECT Genre
FROM MusicGenres
ORDER BY
CASE Genre
WHEN 'Other' THEN 1
ELSE 0
END
ASC, Genre ASC;
परिणाम:
+---------+ | Genre | |---------| | NULL | | NULL | | Blues | | Hip Hop | | Jazz | | Metal | | Pop | | Rock | | Other | +---------+
तो अब हम NULL मानों को नीचे ले जाना चाहते हैं - अन्य . से भी कम ।
हम निम्न क्वेरी के साथ ऐसा कर सकते हैं।
SELECT Genre
FROM MusicGenres
ORDER BY
CASE
WHEN Genre IS NULL THEN 2
WHEN Genre = 'Other' THEN 1
ELSE 0
END
ASC, Genre ASC;
परिणाम:
+---------+ | Genre | |---------| | Blues | | Hip Hop | | Jazz | | Metal | | Pop | | Rock | | Other | | NULL | | NULL | +---------+
इस उदाहरण में, हमने एक भिन्न CASE
. का उपयोग किया है प्रारूप। इस उदाहरण में हमने खोज CASE
. का उपयोग किया है अभिव्यक्ति , पिछले उदाहरण के विपरीत, जिसमें सरल CASE
. का उपयोग किया गया था अभिव्यक्ति ।
खोजा गया CASE
अभिव्यक्ति परिणाम निर्धारित करने के लिए बूलियन अभिव्यक्तियों के एक सेट का मूल्यांकन करती है।
आसान CASE
दूसरी ओर, व्यंजक, परिणाम निर्धारित करने के लिए किसी व्यंजक की तुलना सरल व्यंजकों के समूह से करता है।
आसान CASE
एक्सप्रेशन में CASE
. के बगल में एक इनपुट एक्सप्रेशन होता है कीवर्ड, जबकि, खोजे गए CASE
अभिव्यक्ति नहीं है।
उदाहरण 3 - कुछ पंक्तियों को शीर्ष पर ठीक करें
अब कल्पना करें कि हम एक या एक से अधिक पंक्तियाँ चाहते हैं जो हमेशा परिणामों के शीर्ष पर हों, भले ही वे व्यापक परिणामों के क्रम में कहीं भी फिट हों।
उदाहरण के लिए:
SELECT * FROM vAlbums
ORDER BY ArtistName ASC, AlbumName ASC;
परिणाम:
+------------------------+--------------------------+---------+ | ArtistName | AlbumName | Genre | |------------------------+--------------------------+---------| | AC/DC | Powerage | Rock | | Allan Holdsworth | All Night Wrong | Jazz | | Allan Holdsworth | The Sixteen Men of Tain | Jazz | | Buddy Rich | Big Swing Face | Jazz | | Devin Townsend | Casualties of Cool | Rock | | Devin Townsend | Epicloud | Rock | | Devin Townsend | Ziltoid the Omniscient | Rock | | Iron Maiden | Killers | Rock | | Iron Maiden | No Prayer for the Dying | Rock | | Iron Maiden | Piece of Mind | Rock | | Iron Maiden | Powerslave | Rock | | Iron Maiden | Somewhere in Time | Rock | | Jim Reeves | Singing Down the Lane | Country | | Michael Learns to Rock | Blue Night | Pop | | Michael Learns to Rock | Eternity | Pop | | Michael Learns to Rock | Scandinavia | Pop | | The Script | No Sound Without Silence | Pop | | Tom Jones | Along Came Jones | Pop | | Tom Jones | Long Lost Suitcase | Pop | | Tom Jones | Praise and Blame | Pop | +------------------------+--------------------------+---------+
इन परिणामों को ArtistName
. द्वारा क्रमित किया जाता है , और फिर AlbumName
. द्वारा ।
लेकिन रिकॉर्ड कंपनी ने फैसला किया है कि वे टॉम जोन्स . के लिए एक विशेष प्रचार करना चाहते हैं . और इसलिए वे टॉम जोन्स want चाहते हैं परिणामों के शीर्ष पर प्रदर्शित होने के लिए, लेकिन फिर शेष सभी परिणामों को क्रमानुसार क्रमित किया जाना है - वर्णानुक्रम में कलाकार के नाम से, फिर एल्बम के नाम से।
इस मामले में, हम निम्न कार्य कर सकते हैं:
SELECT * FROM vAlbums
ORDER BY
CASE ArtistName
WHEN 'Tom Jones' THEN 0
ELSE 1
END,
ArtistName ASC, AlbumName ASC;
परिणाम:
+------------------------+--------------------------+---------+ | ArtistName | AlbumName | Genre | |------------------------+--------------------------+---------| | Tom Jones | Along Came Jones | Pop | | Tom Jones | Long Lost Suitcase | Pop | | Tom Jones | Praise and Blame | Pop | | AC/DC | Powerage | Rock | | Allan Holdsworth | All Night Wrong | Jazz | | Allan Holdsworth | The Sixteen Men of Tain | Jazz | | Buddy Rich | Big Swing Face | Jazz | | Devin Townsend | Casualties of Cool | Rock | | Devin Townsend | Epicloud | Rock | | Devin Townsend | Ziltoid the Omniscient | Rock | | Iron Maiden | Killers | Rock | | Iron Maiden | No Prayer for the Dying | Rock | | Iron Maiden | Piece of Mind | Rock | | Iron Maiden | Powerslave | Rock | | Iron Maiden | Somewhere in Time | Rock | | Jim Reeves | Singing Down the Lane | Country | | Michael Learns to Rock | Blue Night | Pop | | Michael Learns to Rock | Eternity | Pop | | Michael Learns to Rock | Scandinavia | Pop | | The Script | No Sound Without Silence | Pop | +------------------------+--------------------------+---------+