Tema SQL
GROUP BY
Divide el conjunto de filas en grupos que comparten los mismos valores en las columnas o expresiones de agrupación. Las funciones de agregado se calculan dentro de cada grupo.
Descripción
GROUP BY resume datos: una fila de salida por grupo. Las columnas del SELECT que no estén en GROUP BY deben aparecer solo dentro de agregados (SUM, MAX, …) salvo extensiones del motor (MySQL en modos permisivos, GROUP BY de clave funcional en PostgreSQL). Combinado con WHERE primero filtras filas, luego agrupas. Con HAVING filtras grupos ya agregados. Para «primer registro por grupo» modernamente se usan también ventanas (ROW_NUMBER).
Estructura general
Forma habitual de la sentencia: orden de cláusulas, qué parte filtra, agrupa o proyecta columnas, y qué devuelve el motor. Cópiala como plantilla y sustituye nombres por tus tablas reales.
SELECT columnas_agrupadas, AGREGADO(...)
FROM tabla
[ WHERE ... ]
GROUP BY columnas_agrupadas
[ HAVING ... ];
Componentes
Cada componente tiene un papel concreto en la ejecución lógica de la sentencia. Léelos en orden: así entiendes qué puedes omitir, qué es obligatorio y qué expresiones son válidas en cada sitio según tu motor.
- GROUP BY
- Lista de columnas o expresiones idénticas a las permitidas en el SELECT no agregado. Puede agrupar por posición numérica en algunos motores (evítalo por claridad).
- Agregados
- COUNT cuenta filas o no nulos; SUM/AVG ignoran NULL; MIN/MAX respetan orden de tipo.
Ejemplos
Ejemplo 1
SELECT departamento_id, COUNT(*) AS n
FROM empleados
GROUP BY departamento_id;
Ejemplo 2
SELECT estado, COUNT(*) FROM pedidos GROUP BY estado;
Temas relacionados
Enlaces internos para seguir leyendo: SELECT, WHERE, JOIN, GROUP BY y el resto de la referencia SQL.
Los ejemplos son ilustrativos. En producción usa consultas parametrizadas (prepared statements), revisa índices y aplica el principio de menor privilegio en cuentas de base de datos.