MySQL 中行的累积总和
为了确定每个 id 的累积总和(按一天中的小时分组),使用了一种常见方法在 MySQL 中。由于早期版本的 MySQL 中缺少分析函数,因此主要采用两种方法:相关子查询或 MySQL 用户变量。
相关子查询方法
此策略涉及一个子查询,该子查询根据匹配条件计算每行的累积总计。然而,对于大量数据集来说,它可能会占用大量资源。
用户变量方法
更有效的方法涉及 MySQL 用户变量和带有 ORDER BY 子句的包装查询以保证行处理顺序。以下步骤概述了此方法:
此方法的示例:
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 ( // Original query with multiple joins and unions ) a LEFT JOIN ( // Unions on multiple tables ) b ON a.id = b.id ORDER BY 1, 2, 3 ) c
此方法允许在 8.0 之前的 MySQL 版本中高效计算累积和,当窗口函数被引入时。
以上是MySQL如何高效计算累计和?的详细内容。更多信息请关注PHP中文网其他相关文章!