PostgreSQL GROUP BY
A cláusula GROUP BY no PostgreSQL é usada para organizar dados idênticos em grupos. É frequentemente usado com funções agregadas como COUNT, SUM, AVG, MAX ou MIN para realizar operações em cada grupo de dados.
Uso
A cláusula GROUP BY é usada quando você precisa organizar as linhas que têm os mesmos valores nas colunas especificadas em linhas de resumo. Ele segue a declaração SELECT e quaisquer funções agregadas para determinar como os dados devem ser agrupados.
SELECT column1, aggregate_function(column2)
FROM table_name
GROUP BY column1;
Nessa sintaxe, GROUP BY column1 agrupa o conjunto de resultados pelos valores em column1.
Exemplos
1. Agrupamento básico
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
Este exemplo conta o número de funcionários em cada departamento, agrupando os resultados com base na coluna department.
2. Agrupamento com SUM
SELECT department, SUM(salary)
FROM employees
GROUP BY department;
Essa consulta calcula o salário total pago por departamento, agrupando as linhas por department e somando a coluna salary.
3. Agrupamento com várias colunas
SELECT department, job_title, AVG(salary)
FROM employees
GROUP BY department, job_title;
Aqui, a consulta agrupa os dados por department e job_title, calculando o salário médio para cada combinação exclusiva de departamento e cargo.
4. Agrupamento com HAVING
SELECT department, COUNT(*)
FROM employees
GROUP BY department
HAVING COUNT(*) > 10;
Este exemplo filtra os dados agrupados para incluir somente os departamentos com mais de 10 funcionários usando a cláusula HAVING.
Dicas e práticas recomendadas
- Selecione apenas as colunas necessárias. Use somente as colunas pelas quais você pretende agrupar ou agregar para garantir uma execução eficiente da consulta.
- Ordene seus resultados. Combine
GROUP BYcomORDER BYpara classificar seus resultados agregados e facilitar a análise. Observe queORDER BYé processado apósGROUP BY, o que pode afetar o desempenho e os resultados. - Use HAVING para filtrar grupos. Use a cláusula
HAVINGpara filtrar grupos após o estágio de agregação, em vez deWHERE, que filtra as linhas antes da agregação. - Garanta o agrupamento correto. Sempre inclua todas as colunas não agregadas da instrução
SELECTna cláusulaGROUP BYpara evitar erros. - Considere o desempenho com grandes conjuntos de dados. Lembre-se de que o uso do site
GROUP BYcom grandes conjuntos de dados pode afetar o desempenho. Considere a possibilidade de indexar as colunas usadas emGROUP BYpara otimizar a execução da consulta.