it-swarm.com.de

Wie kann ich einen Standardwert in einer Select-Abfrage in PostgreSQL verwenden?

Ich möchte einen Standardwert für eine Spalte verwenden, die verwendet werden soll, wenn keine Zeilen zurückgegeben werden. Ist das in PostgreSQL möglich? Wie kann ich es tun? Oder gibt es eine andere Möglichkeit, dies zu lösen?

Z.B. etwas wie das:

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

Und wenn die Tabelle keine Zeilen mit org_id = 3 Enthält, möchte ich 0 Zurückgeben.

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

oder

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

wenn Sie möchten, dass max (post_id) null ist, wenn 1 Zeile vorhanden ist, post_id jedoch null ist

dbfiddle

Wenn Sie 0 (Leider 1 Zeile) anzeigen möchten, wenn Ihre Abfrage 0 Zeilen zurückgibt, können Sie Folgendes verwenden:

SELECT COALESCE( 
        ( SELECT MAX(post_id) FROM my_table WHERE org_id = 3 )
               , 0) AS max_id
14
ypercubeᵀᴹ
SELECT 
  coalesce(MAX(post_id),0) AS max_id 
FROM 
  my_table 
WHERE 
  org_id = 3 

Die oben genannten Funktionen funktionieren nicht, wenn Sie den Standardnamen für das Namensfeld verwenden möchten, und sie funktionieren nur, wenn Sie das Nummernfeld verwenden. Die folgende Abfrage funktioniert für alle Arten von Feldern.

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

Ich kann keines der oben genannten Dinge zum Laufen bringen.

Folgendes habe ich gefunden, um dafür zu arbeiten:

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

Ich erkenne keine elegante Lösung, mache aber den Job.

3
mmandk9