PostgreSQL
 sql >> Base de Dados >  >> RDS >> PostgreSQL

Retorna zero se nenhum registro for encontrado


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

Isso funciona porque sua consulta tem uma função agregada e, consequentemente, sempre retorna uma linha, mesmo que nada seja encontrado na tabela subjacente.

Consultas simples sem agregação retornariam nenhuma linha nesse caso. COALESCE nunca seria chamado e não poderia salvá-lo. Ao lidar com uma única coluna, podemos agrupar toda a consulta:
SELECT COALESCE( (SELECT columnA FROM my_table WHERE ID = 1), 0)
INTO res;

Funciona para sua consulta original também:
SELECT COALESCE( (SELECT SUM(columnA) FROM my_table WHERE columnB = 1), 0)
INTO res;

Mais sobre COALESCE() no manual.
Mais sobre funções agregadas no manual.
Mais alternativas neste post posterior:
  • Como retornar um valor de uma função se nenhum valor for encontrado