Cláusula GROUP BY de MySQL
La cláusula `GROUP BY` de MySQL se utiliza para ordenar datos idénticos en grupos. Se suele emplear con funciones de agregación (como `COUNT`, `SUM`, `AVG`) para realizar cálculos sobre cada grupo de datos.
Utilización
La cláusula `GROUP BY` se utiliza cuando necesitas agregar datos y agrupar filas que tienen los mismos valores en columnas especificadas. Sigue las cláusulas `FROM` y `WHERE` de una consulta SQL.
SELECT column1, aggregate_function(column2)
FROM table_name
[WHERE condition]
GROUP BY column1;
En esta sintaxis, `GROUP BY columna1` organiza el conjunto de resultados en grupos en función de los valores de `columna1`.
Ejemplos
1. Agrupación básica
SELECT department, COUNT(*)
FROM employees
GROUP BY department;
Este ejemplo cuenta el número de empleados de cada departamento, agrupando los datos por la columna `departamento`.
2. Agrupar con varias columnas
SELECT department, job_title, AVG(salary)
FROM employees
GROUP BY department, job_title;
Aquí se calcula el salario medio de cada puesto dentro de cada departamento, agrupando los datos por "departamento" y "puesto".
3. Utilizar GROUP BY con HAVING
SELECT department, SUM(sales)
FROM sales_data
GROUP BY department
HAVING SUM(sales) > 10000;
Este ejemplo agrupa los datos por `departamento` y luego filtra los grupos utilizando `HAVING`, mostrando sólo aquellos departamentos con ventas totales superiores a 10.000.
Consejos y buenas prácticas
- Garantiza la coherencia de las columnas. Incluye sólo columnas no agregadas en la cláusula `GROUP BY` para evitar errores. Si se incluyen columnas no agregadas en la cláusula `SELECT` sin especificarlas en la cláusula `GROUP BY`, pueden producirse resultados inesperados o errores.
- Utiliza funciones agregadas. Combina `GROUP BY` con funciones de agregación para resumir los datos de forma eficaz.
- Ordena los grupos lógicamente. Utiliza `ORDENAR POR` después de `GRUPO POR` para ordenar los resultados y facilitar su lectura.
- Filtra grupos con HAVING. Utiliza `HAVING` en lugar de `WHERE` para filtrar los resultados basándote en cálculos agregados. Recuerda que `DÓNDE` filtra las filas antes de agruparlas, mientras que `DÓNDE` filtra los grupos después de la agregación.
- Ten en cuenta el rendimiento. Cuando utilices `GROUP BY` en grandes conjuntos de datos, ten en cuenta el impacto potencial en el tiempo de ejecución de la consulta. Considera estrategias de optimización, como la indexación, para mejorar el rendimiento.