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