sql >> Databasteknik >  >> RDS >> PostgreSQL

Returnera noll om ingen post hittas

Du kan:

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

Detta råkar fungera eftersom din fråga har en aggregerad funktion och följaktligen alltid returnerar en rad, även om ingenting hittas i den underliggande tabellen.

Vanliga frågor utan aggregat skulle returnera ingen rad i ett sådant fall. COALESCE skulle aldrig bli uppringd och kunde inte rädda dig. Medan vi hanterar en enda kolumn kan vi lägga in hela frågan istället:

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

Fungerar också för din ursprungliga fråga:

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

Mer om COALESCE() i manualen.
Mer om aggregerade funktioner i manualen.
Fler alternativ i detta senare inlägg:

  • Hur man returnerar ett värde från en funktion om inget värde hittas


  1. Hur SECOND() fungerar i MariaDB

  2. SQL Oracle Räknekluster

  3. Hur man infogar och tar bort data i PostgreSQL

  4. Hur man laddar upp och laddar ner filer PHP och MySQL