Rumah > Soal Jawab > teks badan
P粉2452767692023-08-23 09:47:13
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
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
Nota:
JOIN (SELECT @running_total := 0) r
是一个交叉连接,允许在不需要单独的SET
Isytiharkan pembolehubah dalam konteks arahan. r
Nota:
ORDER BY
Sangat penting, ia memastikan pesanan sepadan dengan soalan asal, dan mungkin mempunyai kesan yang lebih besar untuk penggunaan pembolehubah yang lebih kompleks (cth: fungsi ROW_NUMBER/RANK semu, tidak disokong oleh MySQL) P粉0065406002023-08-23 00:13:27
Jika prestasi adalah isu, anda boleh menggunakan pembolehubah MySQL:
set @csum := 0; update YourTable set cumulative_sum = (@csum := @csum + count) order by id;
Sebagai alternatif, anda boleh mengalih keluar lajur cumulative_sum
dan mengiranya dalam setiap pertanyaan:
set @csum := 0; select id, count, (@csum := @csum + count) as cumulative_sum from YourTable order by id;
Ini mengira jumlah kumulatif secara berterusan :)