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áusulaHAVINGse 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 HAVINGsemGROUP BYpode ser feito com a cláusulaWHERE, 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!