Return zero if no record is found

coalesce, null, plpgsql, postgresql, sql

Solution

You could:

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

This happens to work, because your query has an aggregate function and consequently always returns a row, even if nothing is found in the underlying table.

Plain queries without aggregate would return no row in such a case. `COALESCE` would never be called and couldn't save you. While dealing with a single column we can wrap the whole query instead:

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

Works for your original query as well:

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

More about `COALESCE()` in the manual. More about aggregate functions in the manual. More alternatives in this later post:

- How to return a value from a function if no value is found

Problem

I have a query inside a stored procedure that sums some values inside a table: ``` SELECT SUM(columnA) FROM my_table WHERE columnB = 1 INTO res; ``` After this select I subtract `res` value with an integer retrieved by another query and return the result. If `WHERE` clause is verified, all works fine. But if it's not, all my function returns is an empty column (maybe because I try to subtract a integer with an empty value). How can I make my query return zero if the `WHERE` clause is not satisfied?

Original source