La cláusula de agrupamiento ROLLUP en SQL, nos sirven para generar resultados resumidos de diferentes maneras.
Término ROLLUP en SQL
El término ROLLUP en SQL es similar al de CUBE, se refiere a una cláusula que se puede utilizar en una consulta agrupada para generar resultados sub-totales además de los totales generales.
Esta permite a una consulta agrupada generar resultados para cada combinación de valores de las columnas especificadas en la cláusula GROUP BY, así como resultados totales para cada columna especificada.
Por ejemplo, si se tiene una tabla de ventas con atributos como fecha, producto y cantidad vendida, se puede utilizar un ROLLUP para calcular el total de ventas por producto y el total de ventas en general.
Un ejemplo práctico de rollup en SQL podría ser,
SELECT fecha, producto, cantidad_vendida, SUM(cantidad_vendida) AS total_ventas
FROM ventas
GROUP BY ROLLUP(fecha, producto, cantidad_vendida)
En este caso, se está utilizando un ROLLUP para agrupar los resultados de la consulta según los atributos fecha, producto y cantidad vendida y calcular el total de ventas para cada nivel jerárquico de estos atributos.
Además, se está utilizando la función SUM para calcular el total de ventas y se está asignando el resultado a un alias llamado total_ventas.
fecha | producto | cantidad_vendida |
---|---|---|
01/01/2022 | zapatos | 10 |
01/01/2022 | camisa | 5 |
02/01/2022 | zapatos | 20 |
02/01/2022 | camisa | 10 |
03/01/2022 | zapatos | 15 |
03/01/2022 | camisa | 20 |
La consulta anterior devolvería un conjunto de resultados con seis filas,
- Una para el total de ventas por fecha, producto y cantidad vendida
- Una para el total de ventas por fecha y producto
- Una para el total de ventas por fecha
- Una para el total de ventas por producto
- Una para el total de ventas por cantidad vendida
- Una para el total de ventas en general.
Los resultados de la consulta serían los siguientes,
fecha | producto | cantidad_vendida | total_ventas |
---|---|---|---|
01/01/2022 | zapatos | 10 | 10 |
01/01/2022 | camisa | 5 | 5 |
02/01/2022 | zapatos | 20 | 20 |
02/01/2022 | camisa | 10 | 10 |
03/01/2022 | zapatos | 15 | 15 |
03/01/2022 | camisa | 20 | 20 |
01/01/2022 | NULL | NULL | 15 |
02/01/2022 | NULL | NULL | 30 |
03/01/2022 | NULL | NULL | 35 |
NULL | zapatos | NULL | 45 |