sql >> Base de Datos >  >> RDS >> Mysql

Crear una columna de suma acumulativa en MySQL

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

Uso de variables 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:

  • El JOIN (SELECT @running_total := 0) r es una unión cruzada y permite la declaración de variables sin requerir un SET separado dominio.
  • El alias de la tabla, r , MySQL lo requiere para cualquier subconsulta/tabla derivada/vista en línea

Advertencias:

  • específico de MySQL; no es portable a otras bases de datos
  • El 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)