Pular para o conteúdo principal
Documentos
Sintaxe básicaFunções JSONAcionadoresGerenciamento de tabelas e esquemasFunções de cadeia de caracteresFunções matemáticasFunções de dataBancos de dadosÍndices

PostgreSQL HAVING

A cláusula HAVING no PostgreSQL é usada para filtrar registros que funcionam com funções agregadas. Ela permite que você especifique condições em grupos criados pela cláusula GROUP BY.

Uso

A cláusula HAVING é empregada quando você precisa filtrar grupos de dados em conjunto com funções agregadas como SUM, COUNT, ou AVG. Ela vem depois da cláusula GROUP BY e antes de ORDER BY, se usada.

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

Nessa sintaxe, o site HAVING condition filtra os resultados retornados pela cláusula GROUP BY com base nos resultados da função agregada. Enquanto WHERE filtra as linhas antes da agregação, HAVING aplica as condições após a agregação.

Exemplos

1. Filtro de grupo básico

SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;

Essa consulta lista os departamentos com mais de 10 funcionários filtrando grupos criados pela cláusula GROUP BY.

2. Usando SUM com HAVING

SELECT product_id, SUM(quantity)
FROM sales
GROUP BY product_id
HAVING SUM(quantity) > 100;

Aqui, a consulta recupera produtos que venderam mais de 100 unidades, filtrando com base na soma das quantidades.

3. Condição complexa com vários agregados

SELECT manager_id, COUNT(employee_id), AVG(salary)
FROM employees
GROUP BY manager_id
HAVING COUNT(employee_id) > 5 AND AVG(salary) < 70000;

Este exemplo filtra gerentes que supervisionam mais de cinco funcionários e têm um salário médio abaixo de US$ 70.000.

4. HAVING sem GROUP BY

SELECT SUM(quantity)
FROM sales
HAVING SUM(quantity) > 1000;

Este exemplo demonstra o uso do site HAVING sem GROUP BY, filtrando todo o conjunto de dados para descobrir se a quantidade total excede 1.000 unidades.

Dicas e práticas recomendadas

  • Use com GROUP BY. HAVING foi projetado para funcionar com GROUP BY; garanta que sua consulta agrupe os dados adequadamente, embora também possa ser usado sem ele para a agregação de todo o conjunto de dados.
  • Otimize com índices. Considere indexar as colunas usadas na cláusula GROUP BY para melhorar o desempenho.
  • Filtre cedo com WHERE. Use a cláusula WHERE para filtrar as linhas antes da agregação para aumentar a eficiência.
  • Evite o uso excessivo. Use o site HAVING com moderação, pois a filtragem de resultados agregados pode consumir muitos recursos.