SQL 68) 查询新登录用户次日成功的留存率

牛客每个人最近的登录日期(三)

http://www.nowcoder.com/questionTerminal/16d41af206cd4066a06a3a0aa585ad3d

方法)借鉴大牛的方法,思路清晰、简洁高效,太厉害了

新登录用户的次日成功的留存率
解题公式:(第一天登录的新用户并且第二天也登录的用户)/(总用户)

  • 总用户数量
    select count(distinct user_id) from login
  • 每个用户第一天登陆的日子(即为新用户)
    select user_id,min(date) from login group by user_id
  • 后一天登录还登录的新用户
    SELECT user_id, DATE_ADD(MIN(date),INTERVAL 1 DAY) FROM login GROUP BY user_id
    MySQL解法:
    SELECT
    ROUND(COUNT(DISTINCT user_id)*1.0 / (SELECT COUNT(DISTINCT user_id) FROM login), 3)
    FROM login
    WHERE (user_id, date)
    IN
    (SELECT user_id, DATE_ADD(MIN(date),INTERVAL 1 DAY) FROM login GROUP BY user_id);
SQL 文章被收录于专栏

SQL

全部评论
感觉这个可能不太合理,假如表中一个用户不仅有登录第一天和第二天的数据,还有第三第四天...的数据,那就不对了
1 回复 分享
发布于 2021-08-01 10:17
我没懂这个*1.0什么意思
2 回复 分享
发布于 2021-09-14 21:27
想问一下where语句不会影响前面的分母SELECT COUNT(DISTINCT user_id) FROM login) 吗?
点赞 回复 分享
发布于 2023-01-10 17:05 上海
SELECT user_id, DATE_ADD(MIN(date),INTERVAL 1 DAY) FROM login GROUP BY user_id这条语句是有问题的,有可能新用户在一天多次登陆了,应该用SELECT MIN(ID), user_id, DATE_ADD(MIN(date),INTERVAL 1 DAY) FROM login GROUP BY user_id来避免这种情况
点赞 回复 分享
发布于 2022-01-07 13:06

相关推荐

2025-11-28 16:00
已编辑
武汉理工大学 Java
点赞 评论 收藏
分享
评论
54
5
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务