mysql对一列使用sum来获取每个组的总金额

mysql对一列使用sum来获取每个组的总金额,mysql,sql,group-by,sum,cumulative-sum,Mysql,Sql,Group By,Sum,Cumulative Sum,这是表顺序中的数据 有人能帮我做统计工作吗? ------------------------------- id | order_amount | createtime ------------------------------- 1 | 10 | 1513605522 2 | 20 | 1513605523 3 | 30 | 1513605524 4 | 40 | 1513605525 ---

这是表顺序中的数据

有人能帮我做统计工作吗? ------------------------------- id | order_amount | createtime ------------------------------- 1 | 10 | 1513605522 2 | 20 | 1513605523 3 | 30 | 1513605524 4 | 40 | 1513605525 -------------------------------

顺便问一下,是否有可能产生输出。。。。
任何帮助对我都很重要。非常感谢。

在MySQL中,您可以使用相关子查询执行此操作:

select o.*,
       (select sum(o2.order_amount)
        from orders o2
        where o2.createtime <= o.createtime
       ) as running_amount
from orders o;
请注意,子查询仅在较新版本的MySQL中才需要

实际上,MySQL 8.0最终支持窗口函数,因此可以在该版本中使用标准SQL来实现:

select o.*, sum(o.order_amount) over (order by o.createtime) as running_amount
from orders o;
您可以使用:

set @amt := 0;
select @amt := @amt + order_amount as total_income, createtime
from order
order by createtime asc;

你有错误吗?类似于“error 1064,syntax error”?它完全没有显示错误,但是总收入中的值是不同的。请注意,下面的答案将表命名为“orders”(带有-s),这样就不会与SQL关键字order混淆,就像order BY.oops一样,我没有注意到,“order”实际上不是表的有效名称。窗口函数不需要类似于前面的
行无界的
?它就像一个符咒,兄弟。我刚试过第一种解决办法。@MatBailie。window frame子句应该是可选的。该语句看起来很整洁,也很有效。谢谢,伙计
select o.*, (@s := @s + o.order_amount) as running_amount
from (select o.*
      from orders o
      order by createtime
     ) o cross join
     (select @s := 0) params;
select o.*, sum(o.order_amount) over (order by o.createtime) as running_amount
from orders o;
set @amt := 0;
select @amt := @amt + order_amount as total_income, createtime
from order
order by createtime asc;