SQL面试必考——计算留存率

编程入门 行业动态 更新时间:2024-10-25 10:27:01

<a href=https://www.elefans.com/category/jswz/34/1771285.html style=SQL面试必考——计算留存率"/>

SQL面试必考——计算留存率

leetcode 1097. 游戏玩法分析 V
计算第一天的留存率

法一:窗口函数

  1. 找到安装游戏的时间,及每个玩家第一次登陆的时间,通过min()+窗口函数,可以既找到最小值,又保留原来的值。(若使用聚合函数group by则只能保留一组数)
select player_id,event_date,min(event_date) over(partition by player_id) install_dt
from Activity;
  1. 计算第一天的登陆玩家人数,和第二天仍然登陆的人数。用group by分组计算。
select distinct install_dt,count(distinct player_id) installs,round(sum(if datediff(event_date,install_date)=1,1,0)/count(distinct player_id),2) Day1_retention
from 
(select player_id,event_date,min(event_date) over(partition by player_id) install_dt
from Activity) t
group by install_dt;

法二:自连接

  1. 计算第一天登陆时间
  2. 通过左连接能够得到第一天登陆的id以及第二天是否继续登陆的信息,如果第二天没有登陆,则为null。count(*)会将null算入。
select distinct install_dt,count(*) installs,round(count(t2.event_date)/count(*),2) Day1_retention
from
(select player_id,min(event_date) install_dt
from Activity
group by player_id) t1
left join Activity t2
on t1.player_id = t2.player_id
and datediff(t2.event_date,t1.install_dt)=1
group by install_dt;

左连接得到的结果如下

t1.player_idt1.install_dtt2.player_idt2.event_date
12016-03-0112016-03-02
22017-06-25nullnull
32016-03-01nullnull

更多推荐

SQL面试必考——计算留存率

本文发布于:2023-06-27 08:16:47,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/908651.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SQL

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!