550.游戏玩法分析 IV
| 序号 | 题目 | 难度 |
|---|---|---|
| 550 | 题目链接 | 中等 |
题目大意
编写解决方案,报告在首次登录的第二天再次登录的玩家的 比率,四舍五入到小数点后两位。换句话说,你需要计算从首次登录后的第二天登录的玩家数量,并将其除以总玩家数。
Table: Activity
| Column Name | Type |
|---|---|
| player_id | int |
| device_id | int |
| event_date | date |
| games_played | int |
(player_id,event_date)是此表的主键(具有唯一值的列的组合)。 这张表显示了某些游戏的玩家的活动情况。 每一行是一个玩家的记录,他在某一天使用某个设备注销之前登录并玩了很多游戏(可能是 0)。
示例
输入
Activity table:
| player_id | device_id | event_date | games_played |
|---|---|---|---|
| 1 | 2 | 2016-03-01 | 5 |
| 1 | 2 | 2016-03-02 | 6 |
| 2 | 3 | 2017-06-25 | 1 |
| 3 | 1 | 2016-03-02 | 0 |
| 3 | 4 | 2018-07-03 | 5 |
输出
| fraction |
|---|
| 0.33 |
解释
只有 ID 为 1 的玩家在第一天登录后才重新登录,所以答案是 1/3 = 0.33
参考答案
with t1 as (
select
player_id
,min(event_date) min_event_dt
from activity
group by 1
)
select
round(sum(case when t2.player_id is not null then 1 else 0 end) / count(1), 2) as fraction
from t1
left join activity t2
on t1.player_id = t2.player_id
and datediff(t2.event_date, t1.min_event_dt) = 1
;