题解 | #2021年11月每天新用户的次日留存率#
2021年11月每天新用户的次日留存率
http://www.nowcoder.com/practice/1fc0e75f07434ef5ba4f1fb2aa83a450
求留存率的题目主要是要左连接两个表进行求解,主要利用条件是 a表的日期和b表的日期相减等于某个值(几日留存)来进行求解,然后利用count的性质,进行相除并求得最终结果。
这题需要注意的点是
- 需要构造跨天的表,跨天的表用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