题解 | #2021年11月每天新用户的次日留存率#

2021年11月每天新用户的次日留存率

http://www.nowcoder.com/practice/1fc0e75f07434ef5ba4f1fb2aa83a450

求留存率的题目主要是要左连接两个表进行求解,主要利用条件是 a表的日期和b表的日期相减等于某个值(几日留存)来进行求解,然后利用count的性质,进行相除并求得最终结果。

这题需要注意的点是

  1. 需要构造跨天的表,跨天的表用union即可,因为union会把重复的去重掉。 2.需要求11月内的数据,但是where不能在a表中的group前使用,需要在最后使用,因为sql的执行顺序是where前group by之后所以这样会11.04这个数据代进去
select a.dt, 
      (round(count(distinct b.uid)/count(a.uid),2)) uv_left_rate
from (select uid,
             min(date(in_time)) dt
      from tb_user_log  
      group by uid) a
left join (select uid , date(in_time) dt
           from tb_user_log
           union 
           select uid , date(out_time)
           from tb_user_log) b
on a.uid = b.uid 
   and a.dt = date_sub(b.dt, INTERVAL 1 day)
where date_format(a.dt,'%Y-%m') = '2021-11'
group by a.dt
order by a.dt

全部评论

相关推荐

点赞 评论 收藏
分享
1 收藏 评论
分享
牛客网
牛客企业服务