随笔 - 384  文章 - 0  评论 - 0  阅读 - 13万

力扣1097(MySQL)-游戏玩法分析Ⅴ(困难)

题目:

我们将玩家的安装日期定义为该玩家的第一个登录日。

我们还将某个日期 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

解题思路:

①先查询出每个用户的第一次登录时间install_dt;

1 SELECT 
2     player_id, 
3     event_date,
4     MIN( event_date ) OVER ( PARTITION BY player_id ) AS install_dt 
5 FROM activity;

 ②在按install_dt分组,统计出 总人数与日存留人数

1)先判断datediff (event_date, install_dt ) = 1 就是1日留存率,有则为1个,否则为0,再sum求和,这样统计出1日存留率的个数;
2) 用count ( distinct play_id )求出分组的总人数,因为play_id有重复的,所以需要去重;
3)结果需要保留两位小数,故用round( ( 日存留率人数  /  总人数 ) , 2 )保留两位小数。

复制代码
 1 SELECT
 2     install_dt,
 3     count(DISTINCT player_id) as installs,
 4     round(sum(if(datediff(event_date,install_dt)=1,1,0))/count(DISTINCT player_id),2) as day1_retention
 5 FROM
 6     ( SELECT 
 7         player_id, 
 8         event_date,
 9         MIN( event_date ) OVER ( PARTITION BY player_id ) AS install_dt 
10      FROM activity) as a
11 GROUP BY install_dt;
复制代码
posted on   我不想一直当菜鸟  阅读(49)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示