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

问题描述 投票:0回答:2

这是表格订单中的数据。

有没有人可以帮我做统计工作?

-------------------------------
id  | order_amount | createtime
-------------------------------
1   |    10        | 1513605522
2   |    20        | 1513605523
3   |    30        | 1513605524
4   |    40        | 1513605525
-------------------------------
This is the output what I need
-------------------------------
 total_income | createtime
-------------------------------
    10        | 1513605522
    30        | 1513605523
    60        | 1513605524
   100        | 1513605525
-------------------------------
this is my sql statement, it doesn't give me what i want.
select sum(order_amount) as total_income from order group by create time;

BTW. Is it possible to produce the output.... Any help means a lot to me. Many thanks.
mysql sql group-by sum running-total
2个回答
0
投票

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

select o.*,
       (select sum(o2.order_amount)
        from orders o2
        where o2.createtime <= o.createtime
       ) as running_amount
from orders o;

另一个选择 - 使用非标准SQL - 是使用变量:

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;

请注意,子查询仅在更新版本的MySQL中需要。

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

select o.*, sum(o.order_amount) over (order by o.createtime) as running_amount
from orders o;

1
投票

您可以使用:

set @amt := 0;
select @amt := @amt + order_amount as total_income, createtime
from order
order by createtime asc;
© www.soinside.com 2019 - 2024. All rights reserved.