Een gecorreleerde zoekopdracht gebruiken:
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
MySQL-variabelen gebruiken:
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
Opmerking:
- De
JOIN (SELECT @running_total := 0) r
is een cross join, en maakt variabele declaratie mogelijk zonder dat een aparteSET
. nodig is opdracht. - De tabelalias,
r
, is vereist door MySQL voor elke subquery/afgeleide tabel/inline-weergave
Waarschuwingen:
- MySQL-specifiek; niet overdraagbaar naar andere databases
- De
ORDER BY
is belangrijk; het zorgt ervoor dat de volgorde overeenkomt met het OP en kan grotere implicaties hebben voor meer gecompliceerd gebruik van variabelen (IE:psuedo ROW_NUMBER/RANK-functionaliteit, die MySQL mist)