WITH ROLLUP
en SQLEl operador WITH ROLLUP
en SQL se usa junto con GROUP BY
para generar subtotales y un total general en consultas de agregación. Es útil cuando necesitas calcular resúmenes automáticos sin escribir múltiples consultas.
📌 Importante: WITH ROLLUP
está disponible en MySQL, SQL Server y MariaDB, pero en PostgreSQL y Oracle se usa GROUPING SETS
en su lugar.
WITH ROLLUP
Supongamos que tenemos una tabla de ventas:
ventas
id | categoria | producto | cantidad |
---|---|---|---|
1 | Electrónica | Laptop | 5 |
2 | Electrónica | Teléfono | 8 |
3 | Ropa | Camisa | 10 |
4 | Ropa | Pantalón | 6 |
Queremos calcular el total de productos vendidos por categoría y el total general.
WITH ROLLUP
SELECT categoria, producto, SUM(cantidad) AS total_vendido
FROM ventas
GROUP BY categoria, producto WITH ROLLUP;
Resultado:
categoria | producto | total_vendido | |
---|---|---|---|
Electrónica | Laptop | 5 | |
Electrónica | Teléfono | 8 | |
Electrónica | NULL | 13 | ← 📌 Subtotal de Electrónica |
Ropa | Camisa | 10 | |
Ropa | Pantalón | 6 | |
Ropa | NULL | 16 | ← 📌 Subtotal de Ropa |
NULL | NULL | 29 | ← 📌 Total general |
producto
es NULL
, es el total de esa categoría.categoria
como producto
son NULL
, es el total global.GROUP BY
con múltiples columnas)Si usamos más columnas en GROUP BY
, WITH ROLLUP
calculará subtotales para cada nivel:
SELECT categoria, producto, SUM(cantidad) AS total_vendido
FROM ventas
GROUP BY categoria, producto WITH ROLLUP;
Genera tres niveles de agregación:
WITH ROLLUP
y WITH CUBE
Función | Explicación |
---|---|
WITH ROLLUP | Calcula subtotales en una jerarquía definida (de izquierda a derecha en GROUP BY ). |
WITH CUBE | Calcula todas las combinaciones posibles de agregación. |
Ejemplo con CUBE
:
SELECT categoria, producto, SUM(cantidad) AS total_vendido
FROM ventas
GROUP BY categoria, producto WITH CUBE;
Este generaría todos los subtotales posibles (por categoría, por producto, y combinaciones entre ellos).
WITH ROLLUP
?✔ Para obtener subtotales y totales generales automáticamente sin hacer varias consultas.
✔ En reportes y dashboards donde necesitas niveles de resumen en tus datos.
✔ Cuando los datos tienen una estructura jerárquica (por ejemplo, categorías de productos, regiones, etc.).
✅ WITH ROLLUP
agrega subtotales y un total general en un GROUP BY
.
✅ Es útil para reportes resumidos.
✅ Funciona de izquierda a derecha en la jerarquía de GROUP BY
.
✅ Si ves NULL
, significa que es un subtotal o el total general.