首頁 >資料庫 >mysql教程 >MySQL如何有效率地計算累計和?

MySQL如何有效率地計算累計和?

Barbara Streisand
Barbara Streisand原創
2025-01-05 16:15:40675瀏覽

How Can I Efficiently Calculate Cumulative Sums in MySQL?

MySQL 中行的累積總和

為了確定每個id 的累積總和(按一天中的小時分組),使用了一種小時分組),使用了一種常見方法在MySQL 中。由於早期版本的 MySQL 中缺少分析函數,因此主要採用兩種方法:相關子查詢或 MySQL 使用者變數。

相關子查詢方法

此策略涉及一個子查詢,該子查詢根據匹配條件計算每行的累積總計。然而,對於大量資料集來說,它可能會佔用大量資源。

使用者變數方法

更有效的方法涉及 MySQL 使用者變數和帶有 ORDER BY 子句的包裝查詢以保證行處理順序。以下步驟概述了此方法:

  1. 初始化使用者變數以避免現有會話值的干擾。
  2. 使用 ORDER BY 子句將原始查詢嵌入為內嵌視圖。
  3. 在 SELECT 語句中執行累積和計算,比較前一行和目前行值。
  4. 指派目前行值將行的值傳遞給下一次迭代的使用者變數。

此方法的範例:

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
    (
      // Original query with multiple joins and unions
    ) a
    LEFT JOIN
    (
      // Unions on multiple tables
    ) b
    ON a.id = b.id
    ORDER BY 1, 2, 3
  ) c

此方法允許在 8.0 之前的 MySQL 版本中高效計算累積和,當視窗函數被引入時。

以上是MySQL如何有效率地計算累計和?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn