【SQL30】使用sum() over()求每个玩家累计玩数量

有如下一张activity表

player_id   device_id   event_date      games_played
1           2           '2016-01-01'    5
1           2           '2016-05-02'    6
1           3           '2017-07-25'    1
3           1           '2016-03-02'    0
3           4           '2018-07-03'    5

其中games_played是玩家登陆玩的游戏数量,

查询每个玩家每天累计玩的游戏数量有多少?结果如下:

player_id   event_date      games_played_so_far
1           '2016-01-01'    5
1           '2016-05-02'    11
1           '2017-07-25'    12
3           '2016-03-02'    0
3           '2018-07-03'    5

解释:玩家1第一次玩了5个,所以是5,第二次是6个,所以累计就是5+6=11,
第三次是1个,累计就是5+6+1=12
玩家2类似

解决:

select player_id
      ,event_date
      ,sum(games_played) over(partition by player_id order by event_date) as games_played_so_far
  from activity
;
player_id   event_date      games_played_so_far
1           2016-01-01      5
1           2016-05-02      11
1           2017-07-25      12
3           2016-03-02      0
3           2018-07-03      5

备注:建表和数据
create table activity(player_id int,device_id int,event_date date,games_played int);
insert into activity values(1,2,'2016-01-01',5);
insert into activity values(1,2,'2016-05-02',6);
insert into activity values(1,3,'2017-07-25',1);
insert into activity values(3,1,'2016-03-02',0);
insert into activity values(3,4,'2018-07-03',5);

猜你喜欢

转载自blog.csdn.net/debimeng/article/details/104284445