Cláusula GROUP BY do MySQL
A cláusula `GROUP BY` no MySQL é usada para organizar dados idênticos em grupos. É comumente empregado com funções de agregação (como `COUNT`, `SUM`, `AVG`) para realizar cálculos em cada grupo de dados.
Uso
A cláusula `GROUP BY` é usada quando você precisa agregar dados e agrupar linhas que tenham os mesmos valores nas colunas especificadas. Ele segue as cláusulas `FROM` e `WHERE` em uma consulta SQL.
SELECT column1, aggregate_function(column2)
FROM table_name
[WHERE condition]
GROUP BY column1;
Nessa sintaxe, `GROUP BY column1` organiza o conjunto de resultados em grupos com base nos valores da `coluna1`.
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 dados pela coluna `department`.
2. Agrupamento com várias colunas
SELECT department, job_title, AVG(salary)
FROM employees
GROUP BY department, job_title;
Aqui, o salário médio é calculado para cada cargo dentro de cada departamento, agrupando os dados por `department` e `job_title`.
3. Usando GROUP BY com HAVING
SELECT department, SUM(sales)
FROM sales_data
GROUP BY department
HAVING SUM(sales) > 10000;
Este exemplo agrupa os dados por `department` e, em seguida, filtra os grupos usando `HAVING`, exibindo apenas os departamentos com vendas totais superiores a 10.000.
Dicas e práticas recomendadas
- Garanta a consistência da coluna. Inclua apenas colunas não agregadas na cláusula `GROUP BY` para evitar erros. Se colunas não agregadas forem incluídas na cláusula `SELECT` sem serem especificadas na cláusula `GROUP BY`, você poderá obter resultados ou erros inesperados.
- Use funções agregadas. Combine `GROUP BY` com funções de agregação para resumir os dados de forma eficaz.
- Ordene os grupos de forma lógica. Use `ORDER BY` após `GROUP BY` para classificar os resultados e melhorar a legibilidade.
- Filtrar grupos com HAVING. Utilize `HAVING` em vez de `WHERE` para filtrar os resultados com base em cálculos agregados. Lembre-se de que o `WHERE` filtra as linhas antes do agrupamento, enquanto o `HAVING` filtra os grupos após a agregação.
- Considere o desempenho. Ao usar `GROUP BY` em grandes conjuntos de dados, você deve estar ciente do possível impacto no tempo de execução da consulta. Considere estratégias de otimização, como a indexação, para melhorar o desempenho.