当前位置: 首页 > ds >正文

留存率问题

记录时间:2025-05-24
题目来源:牛客网

留存率问题

  • 题目描述
  • 自测输入代码
  • 解题思路
  • 总结

题目描述

牛客每天有很多人登录,请你统计一下牛客新登录用户的次日成功的留存率,
有一个登录(login)记录表,简况如下:
每日登录情况
第1行表示user_id为2的用户在2020-10-12使用了客户端id为1的设备第一次新登录了牛客网
第4行表示user_id为2的用户在2020-10-13使用了客户端id为2的设备登录了牛客网
最后1行表示user_id为1的用户在2020-10-14使用了客户端id为2的设备登录了牛客网
请你写出一个sql语句查询新登录用户次日成功的留存率,即第1天登陆之后,第2天再次登陆的概率,保存小数点后面3位(3位之后的四舍五入),上面的例子查询结果如下:
在这里插入图片描述

查询结果表明:
user_id为1的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存
user_id为2的用户在2020-10-12第一次新登录了,在2020-10-13又登录了,算是成功的留存
user_id为3的用户在2020-10-12第一次新登录了,在2020-10-13没登录了,算是失败的留存
user_id为4的用户在2020-10-13第一次新登录了,在2020-10-14没登录了,算是失败的留存
故次日成功的留存率为 2/4=0.5
(sqlite里查找某一天的后一天的用法是:date(yyyy-mm-dd, ‘+1 day’),四舍五入的函数为round,sqlite 1/2得到的不是0.5,得到的是0,只有1*1.0/2才会得到0.5
mysql里查找某一天的后一天的用法是:DATE_ADD(yyyy-mm-dd,INTERVAL 1 DAY),四舍五入的函数为round)

自测输入代码

drop table if exists login;
CREATE TABLE `login` (
`id` int(4) NOT NULL,
`user_id` int(4) NOT NULL,
`client_id` int(4) NOT NULL,
`date` date NOT NULL,
PRIMARY KEY (`id`));INSERT INTO login VALUES
(1,2,1,'2020-10-12'),
(2,3,2,'2020-10-12'),
(3,1,2,'2020-10-12'),
(4,2,2,'2020-10-13'),
(5,4,1,'2020-10-13'),
(6,1,2,'2020-10-13'),
(7,1,2,'2020-10-14');

解题思路

要求找到新用户次日留存率,先找到新用户及其首次登陆日期,即

select user_id, min(date) 'date'
from login
group by user_id;

在这里插入图片描述
再将这个表和主登录表进行连接

select *
from (select user_id, min(date) 'date'from logingroup by user_id) l1
join login l2 on l1.user_id=l2.user_id;

在这里插入图片描述
接下来主要就是算出来上图中红色记录占所有登录人数的比例(注意是登录人数,不是记录数,只需要按照user_id去重计数即可),题干要求3位小数,使用round即可。

select round(sum(case when l2.date = date_add(l1.date, interval 1 day) then 1 else 0 end) / count(distinct l1.user_id),3) 'p'
from (select user_id, min(date) 'date'from logingroup by user_id) l1join login l2 on l1.user_id = l2.user_id;

在这里插入图片描述

总结

若要求找出某一天的留存率
1、找出这一天前一天登录的用户
2、进行连接,看当天该用户是否再次登录
3、利用(登录人数/前一天总人数)即可计算出留存率

http://www.xdnf.cn/news/8793.html

相关文章:

  • [AI]主流大模型、ChatGPTDeepseek、国内免费大模型API服务推荐(支持LangChain.js集成)
  • QWidget类关系图
  • AI方案调研与实践二:模型训练
  • 电子电路:什么是孤立导体?即孤立导体的电荷分布与特性
  • Linux常见指令合集+知识点
  • 12软件测试需求分析案例-删除学生信息
  • 量子计算:开启未来计算新纪元的革命性技术
  • CAU人工智能class5 激活函数
  • 科学计算中的深度学习模型精解(2)(RNN,LSTM,Transformer,KAN)
  • 自动涂胶机设计及其在工业生产中的应用研究
  • 软件测试:黑盒+白盒测试【等价类/边界值/判定表/因果图/两两组合/场景/错误推测逻辑覆盖/路径分析】
  • 光模块(Optical Module)的工作原理、技术参数、应用场景及行业趋势
  • (头歌作业)-Python第六章作业
  • 给定终点和时间的DoubleS轨迹
  • 语音搜索崛起:专业优化指南助您引领潮流
  • Docker 安装 Harbor 教程(搭建 Docker 私有仓库 harbor 避坑指南)【woodwhales.cn】
  • C++入门
  • mysql统计数据库大小
  • 【场景分析】基于概率距离快速削减法的风光场景生成与削减方法
  • MSP430G2553 USCI模块串口通信
  • tvalid寄存器的理解
  • 第一课如何学习课程
  • WebXR 虚拟现实开发
  • John the Ripper 入门指南:密码破解工具的正确打开方式
  • 【C++】C++异步编程四剑客:future、async、promise和packaged_task详解
  • DeepSeek实战--MCP Client Stdio模式
  • DataFrame 和 Dataset的对比理解
  • 常见嵌入式软件架构
  • Spring Boot微服务架构(三):Spring Initializr创建CRM项目
  • 基于CodeBuddy实现本地网速的实时浏览小工具