首頁 > 資料庫 > mysql教程 > 如何在 8.0 之前的 MySQL 版本中計算運行總計?

如何在 8.0 之前的 MySQL 版本中計算運行總計?

Barbara Streisand
發布: 2025-01-02 22:51:38
原創
902 人瀏覽過

How to Calculate Running Totals in MySQL Versions Prior to 8.0?

計算 MySQL 中行集的累積和

您面臨的任務是取得集合中特定列的運行聚合MySQL 中的行數。挑戰在於 MySQL 8.0 之前的版本缺乏內建分析函數。

使用使用者變數的方法

在這種情況下,您可以使用使用者變數模擬分析函數的功能。這涉及將原始查詢包裝在另一個查詢中,並利用 ORDER BY 順序處理行。

外部查詢檢查目前行的 id 和 day 值是否與前一行的值相符。如果是這樣,則透過新增目前行中的金額來更新累計總計。如果沒有,則累積總數將重設並設定為目前行的金額。

範例查詢

以下範例查詢示範了此方法:

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
              , @subtotal := 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 版本中計算運行總計?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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