Isso é chamado de soma cumulativa.
Em
Oracle
e PostgreSQL
, é calculado usando uma função de janela:SELECT id, val, SUM() OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM mytable
No entanto,
MySQL
não o suporta. Em
MySQL
, você pode calculá-lo usando variáveis de sessão:SET @s = 0;
SELECT id, val, @s := @s + val
FROM mytable
ORDER BY
id
;
ou de uma maneira puramente baseada em conjuntos, mas menos eficiente:
SELECT t1.id, t1.val, SUM(t2.val)
FROM mytable t1
JOIN mytable t2
ON t2.id <= t1.id
GROUP BY
t1.id
;