失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 统计每个日期新用户的次日留存率

统计每个日期新用户的次日留存率

时间:2019-05-17 01:21:51

相关推荐

统计每个日期新用户的次日留存率

统计每个日期新用户的次日留存率

#明确问题:12号的新用户次留是指在12号是第一次登录,并且在13号也登录了。

#分母:当前日期新用户的特征是 当前日期=该用户所有登录日期的最小值

#分子:当前日期作为前一天有该用户的登录记录 并且是第一次登录。(12号作为前一天有这个人,说明13号有这个人)

【易错点】因为分母有可能为0,所以用ifnull(不为null时返回的值,为null时返回的值),这里指定为null时返回0

前一天有该用户的登录记录:

case when (user_id,date)in(select user_id,date(date,'-1 day') from login

第一次登录

(user_id,date)in (select user_id,min(date)from login group by user_id)

#牛客参考代码

select date,ifnull(round((sum(case when (user_id,date)in(select user_id,date_add(date,interval -1 day) from login) and (user_id,date)in (select user_id,min(date)from login group by user_id)then 1 else 0 end))/(sum(case when (user_id,date)in(select user_id,min(date)from login group by user_id)then 1 else 0 end)),3),0)as pfrom logingroup by dateorder by date;

#自己修改后的代码

select date,ifnull(round((sum(case when (user_id,date)in(select user_id,date(date,'-1 day') from login) and (user_id,date)in (select user_id,min(date)from login group by user_id)then 1 else 0 end))*1.0/(sum(case when (user_id,date)in(select user_id,min(date)from login group by user_id)then 1 else 0 end)),3),0.000)as pfrom logingroup by dateorder by date;

题目:

描述:

请你统计一下每个日期新用户的次日留存率。

有一个登录(login)记录表,简况如下:

请你写出一个sql语句查询每个日期新用户的次日留存率,结果保留小数点后面3位数(3位之后的四舍五入),并且查询结果按照日期升序排序,上面的例子查询结果如下:

查询结果表明:

-10-12登录了3个(user_id为2,3,1)新用户,-10-13,只有2个(id为2,1)登录,故-10-12新用户次日留存率为2/3=0.667;

-10-13没有新用户登录,输出0.000;

-10-14登录了1个(user_id为4)新用户,-10-15,user_id为4的用户登录,故-10-14新用户次日留存率为1/1=1.000;

-10-15没有新用户登录,输出0.000;

(注意:sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, ‘+1 day’),sqlite里1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5)

如果觉得《统计每个日期新用户的次日留存率》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。