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


32

मैं उस स्तंभ के लिए एक डिफ़ॉल्ट मान का उपयोग करना चाहूंगा जिसका उपयोग किया जाना चाहिए यदि कोई पंक्तियाँ वापस नहीं आती हैं। क्या यह संभव है PostgreSQL में? मैं यह कैसे कर सकता हूं? या कोई और तरीका है जिससे मैं इसे हल कर सकता हूं?

उदाहरण कुछ इस प्रकार है:

SELECT MAX(post_id) AS max_id DEFAULT 0 FROM my_table WHERE org_id = 3

और अगर org_id = 3मैं जिस तालिका में लौटना चाहता हूं, उसके साथ कोई पंक्तियाँ नहीं हैं 0

जवाबों:


42
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3

या

SELECT case count(*) when 0 then 0 else MAX(post_id) end AS max_id
FROM my_table 
WHERE org_id = 3;

यदि आप चाहते हैं कि अधिकतम (post_id) nullतब हो जब 1 पंक्ति हो लेकिन post_id शून्य है

dbfiddle


13

यदि आप 0अपनी क्वेरी को 0 पंक्तियों में लौटते समय (1 पंक्ति में) दिखाना चाहते हैं, तो आप उपयोग कर सकते हैं:

SELECT COALESCE( 
        ( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
               , 0) AS max_id

7
SELECT 
  coalesce(MAX(post_id),0) AS max_id 
FROM 
  my_table 
WHERE 
  org_id = 3 

उपरोक्त कार्य नहीं करता है यदि आप नाम फ़ील्ड के लिए डिफ़ॉल्ट नाम का उपयोग करना चाहते हैं और यह केवल तभी उपयोग होता है जब आप नंबर फ़ील्ड का उपयोग करते हैं। नीचे दी गई क्वेरी सभी प्रकार के क्षेत्रों के लिए काम करती है।

SELECT 
  COALESCE(
   (SELECT column_name FROM my_table WHERE id = -1), 
   'default_value'
  ) AS column_name;

2

मैं काम करने के लिए ऊपर भी नहीं मिल सकता है।

यहाँ मुझे इसके लिए काम करना है:

SELECT COALESCE(A.max_id, B.dflt) FROM (
SELECT MAX(post_id) AS max_id FROM my_table WHERE org_id = 3) A
       RIGHT OUTER JOIN (SELECT 0 AS dflt) B
       ON 1 = 1

मुझे लगता है कि एक सुंदर समाधान नहीं है, लेकिन यह काम करता है।


1
SELECT coalesce(MAX(post_id),0) AS max_id FROM my_table WHERE org_id = 3मेरे लिए ठीक काम करता है।
जोनास

2
@ mmandk9 क्या आप "काम नहीं करता है" पर विस्तृत रूप से बता सकते हैं - आप किस संस्करण पर पोस्टग्रेट्स हैं और आपको क्या त्रुटि संदेश (यदि कोई है)?
जैक डगलस

-2

यदि कोई पंक्तियाँ नहीं मिली हैं, तो बस डिफ़ॉल्ट मान लौटाएँ:

SELECT IFNULL(s_stock, 5)
  FROM stock_info 
 WHERE s_product_id = '43';

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