Bom dia pessoal. Estou com dificuldades para entender essa função no postgresql . Alquém tem algum tutorial para passar ?
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
Bom dia pessoal. Estou com dificuldades para entender essa função no postgresql . Alquém tem algum tutorial para passar ?
Olá Samuel,
não sei se essa é sua dúvida mas vou tentar :D.
O coalesce é utilizado pra substituir valores nulos por outros valores predefinidos pelo programador.
Exemplo:
Pessoa id, ,nome, telefone 1, João, 1111-2222 2, José, null
Se você escrever a seguinte consulta.
select id, nome, telefone from pessoa;
o retorno seria algo mais ou menos assim:
1, João, 1111-2222 2, José, null
Você viu que o null é retornado na segunda linha, poís ele não está presente na tabela?
Porém você gostaria que ao invés de null viesse algo mais humano no resultado tipo "S/N" para indicar que não há número atrelado a essa pessoa, uma alternativa seria fazer o seguinte:
select id, nome, coalesce(telefone, 'S/N') from pessoa;
e o retorno seria o seguinte:
1, João, 1111-2222 2, José, S/N
Entendeu o que aconteceu? Caso o retorno do telefone seja nulo (não exista) ele substitui pelo conteúdo que você coloca no segundo parâmetro, no caso o "S/ N".
Porém o coalesce não se limita a isso, você poderia utilizar outra coluna para retornar caso a primeira seja nula.
Digamos que você tivesse uma coluna celular na sua tabela pessoa.
Usando a seguinte consulta:
select id, nome, coalesce(telefone, celular) from pessoa
O banco verificaria se o telefone estiver nulo e retorna o celular, caso o celular esteja nulo, retorna nulo mesmo.
O coalesce também é muito útil em cálculos no banco, pois se ao somar uma coluna alguma das linhas estiver nula o banco por padrão irá anular a soma inteira. É comum então encontrar consultas como a seguinte:
select sum(coalesce(vlconta, 0)) from conta
Espero que você tenha entendido. Bons Estudos.