Bom dia, Tiago!
A cláusula HAVING
é geralmente usada em conjunto com GROUP BY
para filtrar grupos de registros após a agregação. No entanto, é possível usar HAVING
sem GROUP BY
, embora isso seja menos comum e tenha algumas limitações.
Limitações:
- Escopo de Aplicação: Sem
GROUP BY
, a cláusula HAVING
se aplica a toda a consulta como um único grupo. Isso significa que você não está filtrando grupos de registros, mas sim a consulta inteira. - Redundância: Muitas vezes, o que você pode fazer com
HAVING
sem GROUP BY
pode ser feito com a cláusula WHERE
, que é mais intuitiva e direta.
Situações de Uso:
- Funções de Agregação: Quando você quer aplicar uma condição a uma função de agregação sem agrupar os resultados. Por exemplo, se você quiser filtrar resultados baseados em uma agregação, mas não precisa agrupar por nenhuma coluna.
Exemplo Prático
Vamos imaginar que você tem uma tabela vendas
e quer encontrar registros onde a soma de todas as vendas seja maior que 10.000. Você pode fazer isso com HAVING
sem GROUP BY
:
SELECT SUM(valor_venda) AS total_vendas
FROM vendas
HAVING total_vendas > 10000;
Neste caso, HAVING
está filtrando o resultado da função de agregação SUM(valor_venda)
.
Comparação com WHERE
A mesma consulta poderia ser feita com WHERE
se não estivéssemos usando uma função de agregação:
SELECT *
FROM vendas
WHERE valor_venda > 10000;
Mas note que WHERE
não pode ser usado para filtrar o resultado de uma função de agregação como SUM
, AVG
, etc. Para isso, HAVING
é a escolha correta.
Espero ter ajudado. Conte com o apoio do Fórum na sua jornada. Fico à disposição. Abraços e bons estudos!
Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!