建立一個在MySQL中進行累積求和的列
P粉670838735
P粉670838735 2023-08-22 11:26:08
0
2
484
<p>我有一個看起來像這樣的表:</p> <pre class="brush:php;toolbar:false;">id count 1 100 2 50 3 10</pre> <p>我想要新增一個名為cumulative_sum的新列,所以表看起來像這樣:</p> <pre class="brush:php;toolbar:false;">id count cumulative_sum 1 100 100 2 50 150 3 10 160</pre> <p>有沒有一條MySQL更新語句可以輕鬆實現這個?最好的方法是什麼? </p>
P粉670838735
P粉670838735

全部回覆(2)
P粉245276769

使用相關查詢:


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變數:


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

注意:

  • JOIN (SELECT @running_total := 0) r是一個交叉連接,允許在不需要單獨的SET命令的情況下宣告變數。
  • MySQL要求為任何子查詢/衍生表/內聯視圖提供表別名r
#

注意事項:

  • 僅適用於MySQL,且不可移植到其他資料庫
  • ORDER BY非常重要,它確保順序與原始問題匹配,並且對於更複雜的變數使用(例如:偽ROW_NUMBER/RANK功能,MySQL不支援)可能會有更大的影響
P粉006540600

如果效能是一個問題,你可以使用MySQL變數:

set @csum := 0;
update YourTable
set cumulative_sum = (@csum := @csum + count)
order by id;

或者,你可以移除cumulative_sum列,並在每個查詢中計算它:

set @csum := 0;
select id, count, (@csum := @csum + count) as cumulative_sum
from YourTable
order by id;

這樣以連續的方式計算累積和 :)

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板
關於我們 免責聲明 Sitemap
PHP中文網:公益線上PHP培訓,幫助PHP學習者快速成長!