力扣534(MySQL)-游戏玩法分析Ⅲ(中等)
题目:
需求:请编写一个 SQL 查询,同时报告每组玩家和日期,以及玩家到目前为止玩了多少游戏。也就是说,在此日期之前玩家所玩的游戏总数。详细情况请查看示例。
查询结果格式在以下示例中:
对于 ID 为 1 的玩家,2016-05-02 共玩了 5+6=11 个游戏,2017-06-25 共玩了 5+6+1=12 个游戏。 对于 ID 为 3 的玩家,2018-07-03 共玩了 0+5=5 个游戏。 请注意,对于每个玩家,我们只关心玩家的登录日期。
解题思路:
方法一:使用聚合函数sum()
①先使用内连接,筛选出b表在a表自身前面的数据;
1 select * 2 from activity a 3 join activity b 4 on a.player_id = b.player_id and a.event_date >= b.event_date;
②再联合组件进行分组,使用sum()统计出在以a表时间为基准,在这之前的日期中游戏总数
1 select a.player_id,a.event_date,sum(b.games_played) as games_played_so_far 2 from activity a 3 join activity b 4 on a.player_id = b.player_id and a.event_date >= b.event_date 5 group by a.player_id,a.event_date;
③将登陆日期和用户id 升序排序就得到示例一样的结果
方法二:使用窗口函数sum() over()
例子:
查询语句为: