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