GROUP BY e HAVING

Concluído

Para obter insights mais profundos e organizar melhor os dados em um banco de dados, o SQL apresenta as cláusulas GROUP BY e HAVING poderosas.

Essas ferramentas permitem transformar dados brutos em resumos significativos categorizando linhas e aplicando funções de agregação, facilitando a análise de tendências, identificar padrões ou gerar relatórios adaptados a categorias específicas.

GROUP BY

Para analisar dados por categoria ou grupo, o SQL fornece a cláusula GROUP BY. Essa cláusula categoriza linhas com base nos valores em colunas especificadas, particionando efetivamente os dados em subconjuntos.

O poder real de GROUP BY é revelado quando ele é usado com funções de agregação. Agregar funções, como executar cálculos COUNT(), SUM(), AVG(), MIN() e MAX()nesses grupos, permitindo gerar estatísticas resumidas para cada categoria.

Por exemplo, use GROUP BY para calcular: -total de vendas SUM() para cada categoria de produto, -preço AVG() médio de produtos de cada fornecedor, -número de clientes COUNT() em cada cidade.

SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id;

Essa consulta recupera o preço médio dos produtos em cada categoria agrupando as linhas da tabela sales.products de acordo com suas category_id. Aplicando a função AVG() à coluna price, a consulta calcula o valor médio dos preços de todos os produtos em cada distinto category_id.

A cláusula GROUP BY nem sempre precisa ser emparelhada com funções de agregação. Embora seja comumente usado junto com funções de agregação para executar cálculos em dados agrupados, o GROUP BY também pode ser usado por si só para organizar dados em grupos para outras finalidades, como recuperar combinações distintas de colunas.

SELECT category_id
FROM sales.products
GROUP BY category_id;

Essa consulta agrupa as linhas por category_id sem executar nenhuma agregação, simplesmente listando cada distinto category_id presente na tabela sales.products.

HAVING

No SQL, a cláusula WHERE não pode ser usada para filtrar os resultados das funções de agregação.
Para filtrar grupos criados pela cláusula GROUP BY com base nos resultados da função de agregação, use a cláusula HAVING.
Pense de HAVING como uma cláusula WHERE para grupos: ela permite aplicar condições aos dados resumidos produzidos por funções de agregação, permitindo que você refine sua análise para se concentrar em grupos relevantes.

SELECT category_id, AVG(price)
FROM sales.products
GROUP BY category_id
HAVING AVG(price) > 30;

Essa consulta calcula a média price de produtos em cada categoria agrupando linhas da tabela sales.products de acordo com suas category_id. Em seguida, filtra os resultados para incluir apenas as categorias em que a média price excede 30 usando a cláusula HAVING.