首页 > 数据库 > mysql教程 > 如何在不使用解析函数的情况下计算MySQL中的累积和?

如何在不使用解析函数的情况下计算MySQL中的累积和?

Barbara Streisand
发布: 2025-01-03 05:33:42
原创
560 人浏览过

How to Calculate Cumulative Sum in MySQL Without Using Analytic Functions?

MySQL 中不使用 SET 的累积总和

在 MySQL 中,缺乏像累积总和这样的分析函数在尝试计算运行总计时带来了挑战。但是,有两种方法可以模拟此功能。

相关子查询

此方法利用主查询中的子查询来获取累积和。然而,它可能是资源密集型且复杂的,尤其是在处理复杂的连接时。

用户变量

或者,可以利用 MySQL 的用户变量来执行控制中断加工。此方法涉及对原始查询的结果进行排序并将其包装在外部查询中。

在外部查询中:

  • 用户变量被初始化以确保以前的值不会干扰。
  • 执行包装的查询,并为连续行添加 ORDER BY 子句
  • 应用以下逻辑:

    • 如果当前 id 和 day 值与上一行中的值匹配,则将当前金额添加到累积小计中。
    • 否则,将累计小计重置为零,并将其指定为当前值amount。

计算后,用户变量将更新为当前 id 和日期值。

示例查询

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
         ( //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 版本,可以为计算一组行的累积和提供有效的解决方案。

以上是如何在不使用解析函数的情况下计算MySQL中的累积和?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板