首页 > 数据库 > 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
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板