Pular para o conteúdo principal
Documentos
FunçõesExpressõesKeywordsDeclaraçõesCláusulas

Cláusula HAVING do MySQL

A cláusula `HAVING` no MySQL é usada para filtrar registros que funcionam em dados agregados retornados por `GROUP BY`. Ele permite que você especifique as condições que determinam quais resultados de grupo serão incluídos na saída.

Uso

A cláusula `HAVING` é aplicada após `GROUP BY` para filtrar dados com base em funções agregadas como `SUM`, `COUNT` ou `AVG`. Ao contrário da cláusula `WHERE`, que não pode operar em dados agregados e é usada para filtragem em nível de linha, a `HAVING` foi projetada especificamente para condições baseadas em agregação.

SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1
HAVING condition;

Nessa sintaxe, `HAVING condition` especifica a condição baseada em agregação para filtrar os resultados agrupados.

Observação: Na ordem de execução das cláusulas SQL, `HAVING` é processado após `GROUP BY` e antes de `ORDER BY`.

Exemplos

1. Uso básico do HAVING

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5;

Este exemplo recupera departamentos com mais de cinco funcionários usando `HAVING` para filtrar o resultado agregado.

2. Usando HAVING com SUM

SELECT customer_id, SUM(order_total) AS total_spent
FROM orders
GROUP BY customer_id
HAVING total_spent > 1000;

Aqui, a cláusula `HAVING` filtra os clientes que gastaram mais de US$ 1.000 no total.

3. Múltiplas condições em HAVING

SELECT product_category, AVG(price) AS avg_price
FROM products
GROUP BY product_category
HAVING avg_price BETWEEN 100 AND 500 AND COUNT(product_id) > 10;

Este exemplo usa várias condições em `HAVING` para encontrar categorias de produtos com um preço médio entre US$ 100 e US$ 500 e mais de dez produtos.

4. Usando HAVING com ORDER BY

SELECT department, COUNT(employee_id) AS num_employees
FROM employees
GROUP BY department
HAVING num_employees > 5
ORDER BY num_employees DESC;

Este exemplo demonstra como usar `ORDER BY` com `HAVING`, classificando os resultados dos departamentos com mais de cinco funcionários em ordem decrescente pelo número de funcionários.

Dicas e práticas recomendadas

  • Use `HAVING` para filtragem agregada. Aplique `HAVING` ao filtrar resultados com base em dados agregados, não para filtragem em nível de linha.
  • Combine com `GROUP BY`. Sempre use `HAVING` com `GROUP BY` porque o `HAVING` opera em dados agrupados.
  • Otimize com índices. Garanta a execução eficiente da consulta usando índices nas colunas envolvidas em `GROUP BY`.
  • Limitar condições complexas. Mantenha as condições de `HAVING` simples para manter o desempenho e a legibilidade.

Aprimoramento de SQL para iniciantes

Adquira as habilidades de SQL para interagir com seus dados e consultá-los.
Comece a aprender de graça