C'est ce qu'on appelle la somme cumulée.
Dans Oracle
et PostgreSQL
, il est calculé à l'aide d'une fonction fenêtre :
SELECT id, val, SUM() OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM mytable
Cependant, MySQL
ne le supporte pas.
En MySQL
, vous pouvez le calculer à l'aide de variables de session :
SET @s = 0;
SELECT id, val, @s := @s + val
FROM mytable
ORDER BY
id
;
ou de manière purement basée sur les ensembles mais moins efficace :
SELECT t1.id, t1.val, SUM(t2.val)
FROM mytable t1
JOIN mytable t2
ON t2.id <= t1.id
GROUP BY
t1.id
;