sql >> Databáze >  >> RDS >> PostgreSQL

Pokud není nalezen žádný záznam, vraťte nulu

Můžete:

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

To se stane, protože váš dotaz má agregační funkci a tedy vždy vrátí řádek, i když v podkladové tabulce není nic nalezeno.

Prosté dotazy bez agregace vrátí žádný řádek v takovém případě. COALESCE by nikdy nebyl zavolán a nemohl by tě zachránit. Při práci s jedním sloupcem můžeme místo toho zabalit celý dotaz:

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

Funguje také pro váš původní dotaz:

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

Další informace o COALESCE() v příručce.
Více o agregačních funkcích v příručce.
Další alternativy v tomto pozdějším příspěvku:

  • Jak vrátit hodnotu z funkce, pokud není nalezena žádná hodnota


  1. Tvorba vizuální databáze pomocí MySQL Workbench

  2. Okamžitá inicializace souboru:Dopad během instalace

  3. SQL Developer 4

  4. Jak uložit adresářovou/hierarchii/stromovou strukturu do databáze?