1. O que é a cláusula HAVING?
A cláusula HAVING no SQL é usada para aplicar condições a resultados agregados após a agrupação dos dados. Ela é tipicamente utilizada em conjunto com a cláusula GROUP BY e serve para filtrar os dados depois da agregação. Ao usar HAVING, você pode extrair apenas os grupos que atendem a critérios específicos.
Por exemplo, HAVING pode ser usada quando você deseja selecionar clientes cujo total de vendas ultrapasse um determinado valor ou grupos cuja média de pontuações supere um limite específico. Diferentemente da cláusula WHERE, que aplica condições a linhas individuais antes da agregação, HAVING aplica condições aos resultados agregados após a agrupação.
Exemplo de uso da cláusula HAVING
Por exemplo, a consulta a seguir extrai clientes cujo total de vendas excede 10.000 ienes:
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
GROUP BY customer_id
HAVING SUM(sales) > 10000;
Esta consulta usa a função SUM para calcular o total de vendas de cada cliente e extrai apenas aqueles cujo total ultrapassa 10.000 ienes.
2. Sintaxe básica e uso da cláusula HAVING
A sintaxe básica da cláusula HAVING é a seguinte:
SELECT column_name, aggregate_function(column_name)
FROM table_name
GROUP BY column_name
HAVING condition;
Essa sintaxe agrupa os dados usando a cláusula GROUP BY e filtra os resultados agregados especificando condições com a cláusula HAVING. Por exemplo, a consulta a seguir extrai clientes que fizeram pelo menos 5 pedidos na tabela de pedidos:
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders_table
GROUP BY customer_id
HAVING COUNT(order_id) >= 5;
Aqui, a função COUNT conta o número de pedidos de cada cliente, e apenas aqueles com 5 ou mais pedidos são filtrados.

3. Exemplos de aplicação da cláusula HAVING
A cláusula HAVING é uma ferramenta poderosa para análises avançadas de dados quando combinada com funções de agregação. Abaixo estão alguns exemplos específicos.
Exemplo 1: Filtrando por total de vendas
Para extrair produtos com vendas superiores a 10.000 ienes, use a função SUM da seguinte forma:
SELECT product_id, SUM(sales) AS total_sales
FROM products_table
GROUP BY product_id
HAVING SUM(sales) > 10000;
Esta consulta calcula o total de vendas de cada produto e extrai aqueles cujo total é maior que 10.000 ienes.
Exemplo 2: Filtrando por número de pedidos
Para extrair clientes que fizeram 10 ou mais pedidos:
SELECT customer_id, COUNT(order_id) AS order_count
FROM orders_table
GROUP BY customer_id
HAVING COUNT(order_id) > 10;
Esta consulta calcula o número de pedidos de cada cliente e extrai apenas aqueles que fizeram 10 ou mais pedidos.
4. Diferença entre HAVING e WHERE
Tanto a cláusula HAVING quanto a cláusula WHERE realizam filtragem, mas são aplicadas em estágios diferentes.
Diferença no momento da aplicação
- Cláusula WHERE: aplicada antes da agrupação, filtrando linhas individuais.
- Cláusula HAVING: aplicada depois da agrupação, filtrando resultados agregados.
Por exemplo, ao combinar WHERE e HAVING em uma consulta, você pode primeiro filtrar os dados onde as vendas são de pelo menos 1.000 ienes usando WHERE e, em seguida, usar HAVING para extrair grupos onde o total de vendas excede 5.000 ienes.
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
WHERE sales >= 1000
GROUP BY customer_id
HAVING SUM(sales) > 5000;
Nesta consulta, os dados filtrados pela cláusula WHERE são agrupados com GROUP BY, e a cláusula HAVING é então aplicada para extrair apenas os clientes com total de vendas superior a 5.000 ienes.

5. Observações importantes ao usar a cláusula HAVING
Deve ser usada com funções de agregação
Como a cláusula HAVING filtra resultados agregados, ela deve ser usada juntamente com funções de agregação como SUM ou COUNT. Para condições sobre linhas individuais, a cláusula WHERE é mais apropriada.
Usando aliases
Na cláusula HAVING, você pode usar aliases especificados com AS em expressões de condição. Por exemplo, pode atribuir um alias às vendas totais e usá‑lo da seguinte forma:
SELECT customer_id, SUM(sales) AS total_sales
FROM sales_table
GROUP BY customer_id
HAVING total_sales > 10000;
Esta consulta extrai clientes cujas vendas totais excedem 10.000 ienes.
6. Resumo: Como Usar a Cláusula HAVING
A cláusula HAVING é uma ferramenta poderosa para filtrar dados agregados de forma flexível, aplicando condições. Ela é particularmente útil ao analisar dados agregados, como vendas ou contagem de pedidos, permitindo uma análise de dados eficiente. Ao compreender suas diferenças em relação à cláusula WHERE e usá‑las adequadamente em conjunto, você pode maximizar a flexibilidade de suas consultas SQL.


