PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Restituisce zero se non viene trovato alcun record

Potresti:

SELECT COALESCE(SUM(columnA), 0) FROM my_table WHERE columnB = 1
INTO res;

Questo funziona, perché la tua query ha una funzione aggregata e di conseguenza sempre restituisce una riga, anche se non viene trovato nulla nella tabella sottostante.

Le query semplici senza aggregato restituirebbero nessuna riga in tal caso. COALESCE non verrebbe mai chiamato e non potrebbe salvarti. Mentre abbiamo a che fare con una singola colonna possiamo invece avvolgere l'intera query:

SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;

Funziona anche per la tua query originale:

SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;

Ulteriori informazioni su COALESCE() nel manuale.
Ulteriori informazioni sulle funzioni aggregate nel manuale.
Altre alternative in questo post successivo:

  • Come restituire un valore da una funzione se non viene trovato alcun valore