我正在尝试开发一个脚本来更新表中的运行总计:
update transactions set running_total = (select sum(amount) from transactions t2 where t2.sequence_number <= transactions.sequence_number)
- running_total = 金额列的累计总和
- sequence_number = 交易发生的顺序:1,2,3,4,5...
MySQL 预计会显示错误您无法在 FROM 子句中指定要更新的目标表“事务”
如何不使用变量(即仅依赖于连接等)重写此脚本
最佳答案
您可以执行以下操作:
执行以下查询:
SELECT t.id, t.total, (SELECT SUM(total) FROM transactions WHERE id <= t.id) AS running FROM transactions t;
将输出存储在临时表中(这里是 documentation)
编写一个更新查询来更新该表中的记录
UPDATE transactions t SET running_total = (SELECT running FROM temp WHERE id = t.id);
删除
temp
表。
对于新的INSERT
s,您可以在应用程序(或 BEFORE INSERT
触发器)中编写逻辑,以在插入行之前计算运行总计。
这是 SQL Fiddle .
关于MySQL计算无变量的运行总计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903922/