Puedes ejecutar cualquier consulta SQL en nuestra consola interactiva: Abrir consola SQL →
GROUP BY en SQL: agrupa y resume información
La cláusula GROUP BY permite agrupar filas que comparten un valor común y aplicar funciones de agregación como COUNT, SUM, AVG, MAX o MIN. Es fundamental para generar reportes y estadísticas.
Tabla de contenidos
1. ¿Qué es GROUP BY?
GROUP BY agrupa filas que comparten un valor en una columna. Luego puedes aplicar funciones de agregación para obtener estadísticas por grupo.
SELECT ciudad, COUNT(*)
FROM usuarios
GROUP BY ciudad;
2. Agrupación simple
SELECT categoria, SUM(precio)
FROM productos
GROUP BY categoria;
3. Funciones de agregación
- COUNT() → cuenta filas
- SUM() → suma valores
- AVG() → promedio
- MAX() → valor máximo
- MIN() → valor mínimo
SELECT ciudad, AVG(edad)
FROM usuarios
GROUP BY ciudad;
4. Agrupar por varias columnas
SELECT ciudad, genero, COUNT(*)
FROM usuarios
GROUP BY ciudad, genero;
5. Filtrar grupos con HAVING
HAVING funciona como WHERE, pero para grupos.
SELECT ciudad, COUNT(*)
FROM usuarios
GROUP BY ciudad
HAVING COUNT(*) > 2;
6. Ejemplos prácticos
SELECT categoria, SUM(precio) FROM productos GROUP BY categoria;
SELECT ciudad, AVG(edad) FROM usuarios GROUP BY ciudad;
SELECT departamento, COUNT(*) FROM empleados GROUP BY departamento;
SELECT ciudad, COUNT(*) FROM usuarios GROUP BY ciudad HAVING COUNT(*) > 1;
7. Ejercicios para practicar
- Agrupa usuarios por ciudad.
- Muestra cuántos usuarios hay por ciudad.
- Agrupa productos por categoría y suma sus precios.
- Agrupa empleados por departamento.
- Filtra ciudades con más de 2 usuarios usando HAVING.
SELECT ciudad FROM usuarios GROUP BY ciudad;
SELECT ciudad, COUNT(*) FROM usuarios GROUP BY ciudad;
SELECT categoria, SUM(precio) FROM productos GROUP BY categoria;
SELECT departamento, COUNT(*) FROM empleados GROUP BY departamento;
SELECT ciudad, COUNT(*) FROM usuarios GROUP BY ciudad HAVING COUNT(*) > 2;
8. Mini‑proyecto: Reporte de ventas por categoría
CREATE TABLE ventas (
id INT PRIMARY KEY,
producto VARCHAR(50),
categoria VARCHAR(50),
precio DECIMAL(10,2)
);
INSERT INTO ventas VALUES (1, 'Camiseta', 'Ropa', 19.99);
INSERT INTO ventas VALUES (2, 'Pantalón', 'Ropa', 29.99);
INSERT INTO ventas VALUES (3, 'Auriculares', 'Electrónica', 49.99);
SELECT categoria,
COUNT(*) AS total_productos,
SUM(precio) AS suma_precios,
AVG(precio) AS precio_promedio
FROM ventas
GROUP BY categoria;
9. Errores comunes
- Usar WHERE en lugar de HAVING para filtrar grupos.
- No incluir todas las columnas no agregadas en GROUP BY.
- Confundir COUNT(*) con COUNT(columna).
- Aplicar funciones de agregación a columnas de texto.
10. Preguntas frecuentes
¿GROUP BY es difícil?
No, pero requiere práctica para entender cómo agrupa los datos.
¿HAVING reemplaza a WHERE?
No, HAVING filtra grupos; WHERE filtra filas.