MySQL计算无变量的运行总计

标签 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 预计会显示错误您无法在 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/

相关文章:

php - 通过android从MySQL表中删除行

mysql - 使用一个 SQL 查询进行 SELECT、UPDATE、DELETE?

asp.net - 将外键应用于表时mysql中的错误代码1005

mysql - 在命令行上禁用外键检查

MYSQL SELECT 与 JOIN、COUNT 和 GROUP BY

mysql - 使用多个 IN 子查询改进 SQL 查询(按属性系统过滤)

mysql - 什么是删除重复主键而不是更新它们(保留最新记录)的快速查询?

mysql - 如何在不将参数传递给 PHP 页面的情况下使用 ReactJS 插入 MySQL

mysql - 目标表不可更新

mysql - 1-many 的子表可以是另一个 1-many 的子表的父表吗