题解 | #牛客每个人最近的登录日期(三)#
牛客每个人最近的登录日期(三)
http://www.nowcoder.com/practice/16d41af206cd4066a06a3a0aa585ad3d
问题:请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入)
问题拆解:1.新登陆用户次日留存率=新登陆用户次日留存人数/总新登陆用户人数
2.总新登陆用户人数(分母) =求出所有的新用户数量
select count(distinct user_id)from login
3.根据userid分类后取每个userid对应date的最小值,可以得出每个新登陆用户
select user_id, min(date) as date1 from login group by user_id
4.第3步新生成表格重命名re和原始表格login链接,限定条件id=id,login表格中的date=新用户登陆第一天的时间再加上一就能得到第二天留存的用户数,外面再加上count可以得到计算留存率的分子。
5.整合以上4步,再加上round四舍五入即可。
总的代码如下:
SELECT round(c1/(select count(distinct user_id) from login),3) AS p
FROM (select count(l.date) c1
FROM login l
JOIN (select user_id, min(date) AS date1
FROM login
GROUP BY user_id) AS re
ON l.user_id=re.user_id
WHERE l.date=date_add(date1,interval 1 DAY)) e1
