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