首页 >数据库 >mysql教程 >如何在 8.0 之前的 MySQL 版本中计算运行总计?

如何在 8.0 之前的 MySQL 版本中计算运行总计?

Barbara Streisand
Barbara Streisand原创
2025-01-02 22:51:38914浏览

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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn