Korzystając ze skorelowanego zapytania:
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
Korzystanie ze zmiennych 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
Uwaga:
JOIN (SELECT @running_total := 0) r
jest sprzężeniem krzyżowym i umożliwia deklarację zmiennych bez konieczności oddzielnegoSET
Komenda.- Alias tabeli,
r
, jest wymagany przez MySQL dla każdego podzapytania/tabeli pochodnej/widoku wbudowanego
Zastrzeżenia:
- specyficzne dla MySQL; nieprzenośne do innych baz danych
ORDER BY
jest ważne; zapewnia, że kolejność pasuje do OP i może mieć większe implikacje dla bardziej skomplikowanego użycia zmiennych (np. funkcjonalność pseudo-ROW_NUMBER/RANK, której brakuje w MySQL)