Como retornar a linha de uma tabela quando o valor do count(*) for 0?

Este é um exemplo simples, imagine que você deseja mostrar todos as frutas, mesmo as que tem a quantidade com o valor 0. Em algumas ocasiões não é possível pois os filtros aplicados no Where terminam eliminando todos os registros daquele tipo de classe. No exemplo abaixo exibiria Morango, mas não seria exibida Banana.

SELECT
id
Count(*) quantidade
FROM
frutas
WHERE
frutas.cor = ‘Vermelho’
GROUP BY ID
ORDER BY ID

A solução para isso é listar todas os registros do dicionário de frutas e fazer um left join com a consulta.

SELECT
  dicionarioFrutas.id
  dicionarioFrutas.nome
  consultaFrutas.quantidade
FROM
  (SELECT frutas.id, frutas.nome FROM frutas) dicionarioFrutas,
  (
    SELECT
      id
      Count(*) quantidade
    FROM
      frutas
    WHERE
      frutas.cor = ‘Vermelho’
    GROUP BY ID
    ORDER BY ID
  ) consulta
  WHERE dicionarioFrutas.ID = consultaFrutas.ID (+) — LEFT JOIN do PL/SQL
  ORDER BY dicionarioFrutas.ID

Assim teriamos como resultado:

Morango: 1
Banana: Null

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

Rolar para cima