mysql对一列使用sum来获取每个组的总金额
这是表顺序中的数据 有人能帮我做统计工作吗? ------------------------------- id | order_amount | createtime ------------------------------- 1 | 10 | 1513605522 2 | 20 | 1513605523 3 | 30 | 1513605524 4 | 40 | 1513605525 ------------------------------- 顺便问一下,是否有可能产生输出。。。。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 ---
任何帮助对我都很重要。非常感谢。在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;