Leetcode_1097. 游戏玩法分析 V

题目描述

们将玩家的安装日期定义为该玩家的第一个登录日。
我们还将某个日期 X 的第 1 天保留时间定义为安装日期为 X 的玩家的数量,他们在 X 之后的一天重新登录,除以安装日期为 X 的玩家的数量,四舍五入到小数点后两位。
编写一个 SQL 查询,报告每个安装日期、当天安装游戏的玩家数量和第一天的保留时间。
查询结果格式如下所示:
在这里插入图片描述
玩家 1 和 3 在 2016-03-01 安装了游戏,但只有玩家 1 在 2016-03-02 重新登录,所以 2016-03-01 的第一天保留时间是 1/2=0.50
玩家 2 在 2017-06-25 安装了游戏,但在 2017-06-26 没有重新登录,因此 2017-06-25 的第一天保留为 0/1=0.00

正确答案
select a.install_dt,        
	count(a.player_id) as installs,        
	round(count(b.player_id)/ count(a.player_id),2) as Day1_retention
from    
	(        
	select player_id,
	min(event_date) as install_dt        
	from Activity        
	group by player_id    
	) as a 
left join Activity as b 
on a.player_id=b.player_id and b.event_date-a.install_dt=1 group by a.install_dt

count(null)=0

思路

from子查询中,先找到所有玩家及其对应的登陆日期(a);
左连接原表,选出每个玩家event_date多于登陆日期1天的数据;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值