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 ROLLUPSupongamos 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 ROLLUPSELECT 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.