SQLで日ごとに累計したい

累計ってプログラム作るしかないと思ってたけど、SQLだけで普通にできるってことをいまさら知った。

会員数の推移を把握したい場合の例

usersテーブル

id  name    created_at
'1','user1','2014-10-20 18:17:53'
'2','user2','2014-10-20 18:17:57'
'3','user3','2014-10-21 18:18:03'
'4','user4','2014-10-22 18:18:14'
'5','user5','2014-10-22 18:18:18'

日毎に集計する

select
  date_format(a.created_at, '%Y-%m-%d') as created_on,
  count(*) as count
from
  users a
group by
  created_on
order by
  created_on;

結果

created_on   count
'2014-10-20','2'
'2014-10-21','1'
'2014-10-22','2'

日毎に累計する

select
  date_format(a.created_at, '%Y-%m-%d') as created_on,
  (select count(*) from users where date_format(created_at, '%Y-%m-%d') <= date_format(a.created_at, '%Y-%m-%d')) as count
from
  users a
group by
  created_on
order by
  created_on;

結果

created_on   count
'2014-10-20','2'
'2014-10-21','3'
'2014-10-22','5'