it-swarm.it

Come posso usare un valore predefinito in una query Select in PostgreSQL?

Vorrei utilizzare un valore predefinito per una colonna che dovrebbe essere utilizzata se non viene restituita alcuna riga. È possibile in PostgreSQL? Come posso farlo? O c'è un altro modo in cui posso risolvere questo?

Per esempio. qualcosa come questo:

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

E se non ci sono righe con org_id = 3 nella tabella che voglio restituire 0.

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

o

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

se vuoi che max (post_id) sia null quando c'è 1 riga ma post_id è nullo

dbfiddle

Se vuoi mostrare 0 (purtroppo 1 riga) quando la query restituisce 0 righe, è possibile utilizzare:

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 

Quanto sopra non funziona se si desidera utilizzare il nome predefinito per il campo nome e funziona solo se si utilizza il campo numerico. La query seguente funziona per tutti i tipi di campi.

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

Non riesco a far funzionare nessuna delle opzioni precedenti.

Ecco cosa ho trovato a lavorare per questo:

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

Realizzo non una soluzione elegante ma fa il lavoro.

3
mmandk9