MySQL 中不使用 SET 的累积总和
在 MySQL 中,缺乏像累积总和这样的分析函数在尝试计算运行总计时带来了挑战。但是,有两种方法可以模拟此功能。
相关子查询
此方法利用主查询中的子查询来获取累积和。然而,它可能是资源密集型且复杂的,尤其是在处理复杂的连接时。
用户变量
或者,可以利用 MySQL 的用户变量来执行控制中断加工。此方法涉及对原始查询的结果进行排序并将其包装在外部查询中。
在外部查询中:
应用以下逻辑:
计算后,用户变量将更新为当前 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中文网其他相关文章!