तालिका के अंत में पूर्ण मानों को सॉर्ट करें


94

क्या पोस्टग्रेक्यूएल के साथ NULLखेतों में चयनित तालिका के अंत तक फ़ील्ड में मानों के साथ पंक्तियों को सॉर्ट करने का एक तरीका है ?

पसंद:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

जवाबों:


169

सबसे पहले, NULL मान डिफ़ॉल्ट आरोही क्रम में अंतिम रूप से सॉर्ट किए जाते हैं । आपको कुछ अतिरिक्त करने की जरूरत नहीं है।

यह मुद्दा अवरोही क्रम पर लागू होता है , जो कि पूर्ण व्युत्क्रम है और इस प्रकार पहले NULL मान को सॉर्ट करता है। समाधान @Mosty उठाई बाहर के साथ पेश किया गया था PostgreSQL 8.3 :

ORDER BY somevalue DESC NULLS LAST

के लिए PostgreSQL 8.2 और इस मानक SQL सुविधा आपको स्थानापन्न कर सकते हैं बिना बड़े या अन्य आरडीबीएमएस:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEपहले की तरह TRUE, इसलिए NULL मान पिछले उदाहरण की तरह आते हैं।

संबंधित उत्तर बाद में:


1
सबसे वास्तविक दुनिया के अनुप्रयोगों में IMHO आप जो भी आदेश चाहते हैं, वे शून्य मान चाहते हैं। उदाहरण के लिए DESC को एक वैकल्पिक टाइमस्टैम्प, Firstname, lastname पर सॉर्ट करना ... इसलिए मुझे यह वास्तव में संदेहास्पद लगता है, भले ही यह समझ में आता हो कि गणितीय रूप से DESC आदेश ASC के विपरीत है। हो सकता है कि नल केवल अपनी खुद की श्रेणी में हों और ASC, DESC से प्रभावित न हों और हमेशा अंतिम रखें, यह एक बेहतर डिफ़ॉल्ट होता।
क्रिस्टोफ रूसो

यह अनुक्रमणिकाओं को प्रभावित कर सकता है यदि वे DESC हैं तो हो सकता है कि आप इसके बारे में भी एक नोट जोड़ सकें? postgresql.org/message-id/…
क्रिस्टोफ रूसो

@ChristopheRoussy: सॉर्ट क्रम से मेल खाने वाले इंडेक्स ऊपर दिए गए लिंक में दिए गए हैं।
एरविन ब्रान्डसेट्टर

2
व्यक्तिगत रूप से मुझे लगता है कि डिफ़ॉल्ट विपरीत होना चाहिए: NULLs आरोही क्रम में पहले आते हैं, और अंतिम क्रम में उतरते हैं। यह बहुत अधिक सहज है, क्योंकि NULL "सबसे छोटा" मान है।
स्टीफन

1
MYSQL से आने वाले लोगों के लिए, यह एक योग्य है? पहली बार में इसे इस तरह क्यों बनाया गया था। या
मैसुकल

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.