Te traemos la solución a esta impedimento, al menos eso deseamos. Si continuas con inquietudes puedes dejarlo en el apartado de preguntas, para nosotros será un placer ayudarte
Solución:
Usando una consulta correlacionada:
SELECT t.id,
t.count,
(SELECT SUM(x.count)
FROM TABLE x
WHERE x.id <= t.id) AS cumulative_sum
FROM TABLE t
ORDER BY t.id
Usando variables de MySQL:
SELECT t.id,
t.count,
@running_total := @running_total + t.count AS cumulative_sum
FROM TABLE t
JOIN (SELECT @running_total := 0) r
ORDER BY t.id
Nota:
- los
JOIN (SELECT @running_total := 0) r
es una combinación cruzada y permite la declaración de variables sin necesidad de unaSET
dominio. - El alias de la mesa,
r
es requerido por MySQL para cualquier subconsulta/tabla derivada/vista en línea
Advertencias:
- MySQL específico; no portable a otras bases de datos
- los
ORDER BY
es importante; asegura que el orden coincida con el OP y puede tener mayores implicaciones para el uso de variables más complicadas (IE: funcionalidad psuedo ROW_NUMBER/RANK, de la que carece MySQL)
Si el rendimiento es un problema, puede usar una variable de MySQL:
set @csum := 0;
update YourTable
set cumulative_sum = (@csum := @csum + count)
order by id;
Alternativamente, puede quitar el cumulative_sum
columna y calcularlo en cada consulta:
set @csum := 0;
select id, count, (@csum := @csum + count) as cumulative_sum
from YourTable
order by id;
Esto calcula la suma acumulada de forma continua 🙂
MySQL 8.0/MariaDB admite ventanas SUM(col) OVER()
:
SELECT *, SUM(cnt) OVER(ORDER BY id) AS cumulative_sum
FROM tab;
Producción:
┌─────┬──────┬────────────────┐
│ id │ cnt │ cumulative_sum │
├─────┼──────┼────────────────┤
│ 1 │ 100 │ 100 │
│ 2 │ 50 │ 150 │
│ 3 │ 10 │ 160 │
└─────┴──────┴────────────────┘
db<>violín
Al final de la artículo puedes encontrar las interpretaciones de otros gestores de proyectos, tú aún puedes insertar el tuyo si te apetece.
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)