首页 >数据库 >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