我需要计算用户总数"聚合",日复一日,例如:
表用户:
id create_date
0 2016-09-01 00:00:00
1 2016-09-01 00:00:00
2 2016-09-01 00:00:00
3 2016-09-02 00:00:00
4 2016-09-02 00:00:00
5 2016-09-02 00:00:00
6 2016-09-03 00:00:00
7 2016-09-03 00:00:00
8 2016-09-04 00:00:00
9 2016-09-04 00:00:00
使用以下查询:
select date(u.create_date),count(u.id)
from user u
group by date(u.create_date)
返回:
date(u.create_date) count(u.id)
2016-09-01 3
2016-09-02 3
2016-09-03 2
2016-09-04 2
但我需要返回这样汇总的数据:
date(u.create_date) count(u.id)
2016-09-01 3
2016-09-02 6
2016-09-03 8
2016-09-04 10
THX,
注意:表格键" id"有孔,(非顺序)。
答案 0 :(得分:2)
你想要一个累积总和。在MySQL中,这可能是使用变量最简单的方法:
select dte, cnt, (@c := @c + cnt) as running_cnt
from (select date(u.create_date) as dte, count(u.id) as cnt
from user u
group by date(u.create_date)
) d cross join
(select @c := 0) params
order by dte;
注意:在对变量使用聚合时,我发现子查询是必要的。
你也可以这样做:
select d.dte,
(select count(*)
from users u
where u.create_date < date_add(u.dte, interval 1 day)
) as running_cnt
from (select distinct date(u.create_date) as dte from user u) d;
对于少量数据,这在性能方面很好。