首頁 > 資料庫 > mysql教程 > 如何在不使用解析函數的情況下計算MySQL中的累積和?

如何在不使用解析函數的情況下計算MySQL中的累積和?

Barbara Streisand
發布: 2025-01-03 05:33:42
原創
555 人瀏覽過

How to Calculate Cumulative Sum in MySQL Without Using Analytic Functions?

MySQL 中不使用SET 的累積總和

在MySQL 中,缺乏像累積總和這樣的分析函數在嘗試計算運行總計時帶來了挑戰。但是,有兩種方法可以模擬此功能。

相關子查詢

此方法利用主查詢中的子查詢來取得累積和。然而,它可能是資源密集且複雜的,尤其是在處理複雜的連接時。

使用者變數

或者,可以利用 MySQL 的使用者變數來執行控制中斷加工。此方法涉及對原始查詢的結果進行排序並將其包裝在外部查詢中。

在外部查詢中:

  • 使用者變數被初始化以確保先前的值不會幹擾。
  • 執行包裝的查詢,並為連續行添加ORDER BY 子句
  • 應用以下邏輯:

    • 如果當前id 和day 值與上一行中的值匹配,則將當前金額加到累積小計中。
    • 否則,將累計小計重設為零,並將其指定為目前值amount。

計算後,使用者變數將更新為目前 id 和日期值。

範例查詢

SELECT IF(@prev_id = c.id AND @prev_day = c.day,
         @cumtotal := @cumtotal + c.amount,
         @cumtotal := c.amount) AS cumulative_total,
     @prev_id  := c.id  AS `id`,
     @prev_day := c.day AS `day`,
     c.hr,
     c.amount AS `amount`
  FROM ( SELECT @prev_id  := NULL, @prev_day := NULL, @cumtotal := 0 ) i
  JOIN (

         select id, day, hr, amount from
         ( //multiple joins on multiple tables)a
         left join
         (//unions on multiple tables)b
         on a.id=b.id

         ORDER BY 1,2,3
       ) c
登入後複製

如果需要列順序變更:

SELECT d.id, d.day, d.hr, d.amount, d.cumulative_total
FROM (
       // query from above
     ) d
登入後複製

此方法適用於8.0 之前的MySQL 版本,可以為計算一組行的累積和提供有效的解決方案。

以上是如何在不使用解析函數的情況下計算MySQL中的累積和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板