Saltar al contenido

Crear una columna de suma acumulativa en MySQL

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 una SET dominio.
  • El alias de la mesa, res 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)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *