首先,这是我关于该问题的第一个问题:SQL request to group and sum numbers by their day of creation
现在,想象一下我想让它变得更复杂,在之前的操作之后并且由于答案,我有按天分组的结果,所以每天的每个条目都被添加。我有这个:
1 | 200 | 2010-01-01
2 | 100 | 2010-01-01
转变为:
1 | 300 | 2010-01-01
这已经很不错了,但是如果我希望每次增加金额字段怎么办?
1 | 300 | 2010-01-01
2 | 200 | 2010-01-02
将成为:
1 | 300 | 2010-01-01
2 | 500 | 2010-01-02
x | (previous amount + this amount) | this date
我得到的sql查询得益于我上一个问题的答案:
select sum(amount), to_char(date, 'YYYY-MM-DD')
from mytable
group by to_char(date, 'YYYY-MM-DD')
order by sum(amount) ASC;
答案 0 :(得分:3)
可以使用窗口函数完成运行总和:
select sum(amount) over (order by date asc),
to_char(date, 'YYYY-MM-DD')
from mytable
order by date ASC;
如果您想要对聚合结果进行运行总和,只需将其放入子查询中:
select sum(day_total) over (order by date) as running_total,
day_total,
date
from (
select sum(amount) as day_total,
date
from mytable
group by date
) t
order by date
如果列date
是实际的数据类型date
,则没有理由在其上使用to_char()。顺便说一句:对于列名使用保留字(date
)并不是一个非常好的主意。
这里重要的是order by
作为over
定义的一部分。
手册中的更多详细信息:http://www.postgresql.org/docs/current/static/tutorial-window.html
答案 1 :(得分:1)
这是一个总计。
查看following question。 Quassnoi的回答是PostgreSQL。
答案 2 :(得分:0)
试试这个:
select date,(select sum(amount)
from mytable11 T1
where T1.date<=T2.date
)as cum_sum
from mytable11 T2
group by date