MySQL计算没有变量的运行总计

时间:2017-01-27 22:16:47

标签: mysql

我正在尝试开发一个脚本来更新表中的运行总计:

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预计会显示错误您无法指定目标表&#39;事务&#39;用于FROM子句中的更新

如何重新编写此脚本不使用使用变量(即仅依赖连接等)

1 个答案:

答案 0 :(得分:1)

您可以执行以下操作:

  • 执行以下查询:

    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,您可以在应用程序(或BEFORE INSERT触发器)中编写逻辑,以在插入行之前计算运行总计。

这是SQL Fiddle