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

编程知识 行业动态 更新时间:2024-06-13 00:22:21

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-04-02 08:17:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/a33b1b4f25b8911988573fc8371dbc27.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:SQL

发布评论

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

>www.elefans.com

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