Calcular Totales Acumulados (Running Totals)
En este paso, aprenderás a calcular totales acumulados (sumas acumulativas o running totals) utilizando funciones de ventana. Los totales acumulados son útiles para rastrear la suma de valores durante un período de tiempo o en un conjunto de filas.
Para calcular los totales acumulados, se utiliza la función SUM()
con la cláusula OVER()
y una cláusula ORDER BY
para especificar el orden en que se calcula la suma.
Primero, añadamos una columna sale_date
(fecha de venta) a la tabla sales
y la rellenemos con algunas fechas de ejemplo. Ejecuta los siguientes comandos en el indicador sqlite>
:
ALTER TABLE sales ADD COLUMN sale_date DATE;
UPDATE sales SET sale_date = '2023-01-01' WHERE product_name = 'Laptop';
UPDATE sales SET sale_date = '2023-01-05' WHERE product_name = 'Keyboard';
UPDATE sales SET sale_date = '2023-01-10' WHERE product_name = 'Mouse';
UPDATE sales SET sale_date = '2023-01-15' WHERE product_name = 'Monitor';
UPDATE sales SET sale_date = '2023-01-20' WHERE product_name = 'Headphones';
UPDATE sales SET sale_date = '2023-01-25' WHERE product_name = 'Webcam';
Estos comandos añaden una columna sale_date
a la tabla sales
y actualizan la tabla con fechas de ejemplo para cada producto.
Ahora, calculemos el total acumulado de sales_amount
a lo largo del tiempo, ordenado por sale_date
. Ejecuta la siguiente consulta:
SELECT
sale_date,
product_name,
sales_amount,
SUM(sales_amount) OVER (ORDER BY sale_date) AS running_total
FROM
sales;
Esta consulta calcula el total acumulado de sales_amount
a lo largo del tiempo, ordenado por sale_date
.
SUM(sales_amount) OVER (ORDER BY sale_date)
calcula la suma acumulativa de sales_amount
hasta cada sale_date
.
ORDER BY sale_date
especifica que el total acumulado debe calcularse basándose en la sale_date
en orden ascendente.
Resultado Esperado:
2023-01-01|Laptop|1200|1200
2023-01-05|Keyboard|75|1275
2023-01-10|Mouse|25|1300
2023-01-15|Monitor|300|1600
2023-01-20|Headphones|100|1700
2023-01-25|Webcam|50|1750
La columna running_total
muestra la suma acumulativa de sales_amount
hasta cada sale_date
. Por ejemplo, el total acumulado en '2023-01-15' es 1600, que es la suma de las ventas de '2023-01-01', '2023-01-05', '2023-01-10' y '2023-01-15'.