Đây được gọi là tổng tích lũy.
Trong Oracle
và PostgreSQL
, nó được tính bằng hàm cửa sổ:
SELECT id, val, SUM() OVER (ORDER BY id ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW)
FROM mytable
Tuy nhiên, MySQL
không hỗ trợ nó.
Trong MySQL
, bạn có thể tính toán nó bằng cách sử dụng các biến phiên:
SET @s = 0;
SELECT id, val, @s := @s + val
FROM mytable
ORDER BY
id
;
hoặc theo cách thuần túy dựa trên tập hợp nhưng kém hiệu quả hơn:
SELECT t1.id, t1.val, SUM(t2.val)
FROM mytable t1
JOIN mytable t2
ON t2.id <= t1.id
GROUP BY
t1.id
;