कुछ अन्य डेटाबेस (जैसे Oracle) के विपरीत PostgreSQL में पूरी तरह कार्यात्मक boolean
. है प्रकार। आप इसका उपयोग सीधे कर सकते हैं ORDER BY
. में एक CASE
applying लागू किए बिना खंड कथन - वे अधिक जटिल परिस्थितियों के लिए उपयुक्त हैं।
boolean
. के लिए क्रम से लगाएं मान है:
FALSE -> TRUE -> NULL
यदि आप ORDER BY bool_expression
DESC
, आप ऑर्डर को इसमें उल्टा कर देते हैं:
NULL -> TRUE -> FALSE
अगर आप TRUE
चाहते हैं पहला और NULL
अंत में, NULLS LAST
. का उपयोग करें ORDER BY
. का खंड :
ORDER BY (featured AND created_at > now() - interval '11 days') DESC NULLS LAST
, created_at DESC
बेशक, NULLS LAST
केवल तभी प्रासंगिक है जब featured
या created_at
कर सकते हैं NULL
होना . यदि कॉलम परिभाषित हैं NOT NULL
, तो परेशान न हों।
साथ ही, FALSE
NULL
. से पहले सॉर्ट किया जाएगा . यदि आप इन दोनों के बीच अंतर नहीं करना चाहते हैं, तो आप या तो CASE
. पर वापस आ गए हैं कथन, या आप NULLIF()
in में फेंक सकते हैं या COALESCE()
।
ORDER BY NULLIF(featured AND created_at > now() - interval '11 days'), FALSE)
DESC NULLS LAST
, created_at DESC
प्रदर्शन
ध्यान दें, मैंने कैसे इस्तेमाल किया:
created_at > now() - interval '11 days'
और नहीं :
now() - created_at < interval '11 days'
पहले उदाहरण में, दाईं ओर का व्यंजक एक स्थिरांक है जिसकी गणना एक बार . की जाती है . फिर मिलान पंक्तियों को देखने के लिए एक अनुक्रमणिका का उपयोग किया जा सकता है। बहुत कुशल।
उत्तरार्द्ध का आमतौर पर एक सूचकांक के साथ उपयोग नहीं किया जा सकता है। प्रत्येक पंक्ति के लिए एक मान की गणना की जानी चाहिए, इससे पहले कि इसे निरंतर अभिव्यक्ति के खिलाफ दाईं ओर चेक किया जा सके। अगर आप इससे बच सकते हैं तो ऐसा न करें। कभी!