MySql 练习- 留存率计算
MySql 练习- 留存率计算
最近开始每天抽空刷几道MySQL的题,还是要多实战练练,不然容易忘。今天分享一道MySQL里面的留存率计算
数据源:question_practice_detail
id | device_id | quest_id | result | date |
---|---|---|---|---|
1 | 2138 | 111 | wrong | 5/3/2021 |
2 | 3214 | 112 | wrong | 5/9/2021 |
3 | 3214 | 113 | wrong | 6/15/2021 |
4 | 6543 | 111 | right | 8/13/2021 |
5 | 2315 | 115 | right | 8/13/2021 |
6 | 2315 | 116 | right | 8/14/2021 |
7 | 2315 | 117 | wrong | 8/15/2021 |
… |
题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。
思路分析1:
-- 先将device_id去重,取出date字段,并自关联
select distinct device_id,date from question_practice_detail;
-- 自关联select * from(select distinct device_id,date from question_practice_detail) t1left join (select distinct device_id,date from question_practice_detail) t2on t1.device_id=t2.device_id
输出结果如下:
device_id | date | device_id(1) | date(1) |
---|---|---|---|
2138 | 5/3/2021 | 2138 | 5/3/2021 |
3214 | 5/9/2021 | 3214 | 5/9/2021 |
3214 | 5/9/2021 | 3214 | 6/15/2021 |
3214 | 5/9/2021 | 3214 | 8/15/2021 |
3214 | 5/9/2021 | 3214 | 8/16/2021 |
3214 | 5/9/2021 | 3214 | 8/18/2021 |
3214 | 6/15/2021 | 3214 | 5/9/2021 |
3214 | 6/15/2021 | 3214 | 6/15/2021 |
3214 | 6/15/2021 | 3214 | 8/15/2021 |
3214 | 6/15/2021 | 3214 | 8/16/2021 |
3214 | 6/15/2021 | 3214 | 8/18/2021 |
6543 | 8/13/2021 | 6543 | 8/13/2021 |
2315 | 8/13/2021 | 2315 | 8/13/2021 |
.... |
思路分析2:结合题目只要次日留存率,其实就是date(1)要比date往后延1天;
select * from(select distinct device_id,date from question_practice_detail) t1left join (select distinct device_id,date from question_practice_detail) t2on t1.device_id=t2.device_id and datediff(t2.date,t1.date)=1-- 或者是t2.date=date_add(t1.date, interval 1 day)
此处简单讲一下MySQL中left join on 后的 and 条件与 where 中条件的区别:
left join的on里加的and,左表的数据一直会在,右表里,不符合条件的部分会直接为null。
left join的on里加的where,是对两表结合后的结果做筛选;
and 示例
select * from(select distinct device_id,date from question_practice_detail) t1left join (select distinct device_id,date from question_practice_detail) t2on t1.device_id=t2.device_id and datediff(t2.date,t1.date)=1
结果如下
device_id | date | device_id(1) | date(1) |
---|---|---|---|
2138 | 5/3/2021 | None | None |
3214 | 5/9/2021 | None | None |
3214 | 6/15/2021 | None | None |
6543 | 8/13/2021 | None | None |
2315 | 8/13/2021 | 2315 | 8/14/2021 |
2315 | 8/14/2021 | 2315 | 8/15/2021 |
... |
where 示例
select * from(select distinct device_id,date from question_practice_detail) t1left join (select distinct device_id,date from question_practice_detail) t2on t1.device_id=t2.device_id where datediff(t2.date,t1.date)=1
结果如下:
device_id | date | device_id(1) | date(1) |
---|---|---|---|
2315 | 8/13/2021 | 2315 | 8/14/2021 |
2315 | 8/14/2021 | 2315 | 8/15/2021 |
3214 | 8/15/2021 | 3214 | 8/16/2021 |
思路分析3:计算留存率,其实就是count(device_id(1))/count(device_id)
select count(t2.device_id)/count(t1.device_id) from(select distinct device_id,date from question_practice_detail) t1left join (select distinct device_id,date from question_practice_detail) t2on t1.device_id=t2.device_id and datediff(t2.date,t1.date)=1
结果:0.3000
本文由 mdnice 多平台发布
MySql 练习- 留存率计算相关推荐
- mysql 用户留存率计算(每日新增DNU,次日留存率,3日留存率,7日留存率)
我是先学习了这位大神留存率的写法,然后我自己完善了一下.@阿柯@ 首先声明一下留存的概念 次日留存:1月1日注册的新用户,在1月2日登陆了app.即登陆日期 - 注册日期 = 1天. 3日留存:1月1 ...
- mysql怎么分组计算逾期率_Tableau分享第一篇:如何计算分组留存率(Cohort Analysis)!...
衡量一款产品是否健康,用户的留存率是一个关键的指标,常见的有7日留存率,14天留存率,30天留存率,60天留存率等等.今天Tay哥先讲一下如何用Tableau做Cohort Analysis ,中文一 ...
- php 经纬度 距离排序,php mysql 根据经纬度计算距离和排序
#1.两点距离(1.4142135623730951) select st_distance(point(0,0),point(1,1)); select st_distance(point (120 ...
- mysql——查询优化案例计算
文章目录 mysql--查询优化案例计算 前言 准备 成本分析 成本计算 全表扫描的成本 走shop_id索引的成本 mysql--查询优化案例计算 前言 上一篇博客说到查询优化器,但是并没有说查询成 ...
- 一个SQL,程序实现多日留存率计算
留存率是衡量用户质量的最重要指标之一,因此计算用户留存率是用户数据分析中必须掌握的技能之一. 留存率指标中,通常需要关注次日留存.3日留存.7日留存和月留存.对新增用户而言,需要关注更细颗粒度的数据, ...
- 在MySQL查询中计算一个人的年龄
最近在Phpfreaks.com论坛上提出了一个问题,即有人使用MySQL数据库存储用户出生日期的最佳方式.一个人建议使用varchar,因为他们最熟悉字符串函数.我的回答是使用MySQL日期类型. ...
- mysql数据中计算时间差函数
mysql数据中计算时间差函数 MySql计算两个日期的时间差函数TIMESTAMPDIFF用法: 语法: TIMESTAMPDIFF(interval,datetime_expr1,datetime ...
- w10 启动mysql 出现“本地计算机上的MYSQL服务启动后停止xxxxx“
启动mysql 出现"本地计算机上的MYSQL服务启动后停止xxxxx" 出现的问题: 解决步骤 1.在windows控制台输入mysqld --console 回车 出现: 解决 ...
- 基于MySQL进行留存率的计算
文章目录 前言 实现方法 单日期实现 多日期的留存数 尾记 前言 在对用户进行行为分析时,经常需要计算用户在软件当中的留存率的情况,如果用Python实现,是比较容易的,那如何用SQL进行计算呢,本文 ...
最新文章
- 最大信息系数——检测变量之间非线性相关性
- 反编译DLL并修改再生成DLL
- 阿里云直播转点播最佳实践
- 作者:程学旗(1972-),男,中国科学院计算技术研究所研究员、博士生导师、副所长,中国科学院网络数据科学与技术重点实验室主任。...
- 中国内窥镜检漏装置行业市场供需与战略研究报告
- linux消息队列消息清空函数,ipcrm命令_Linux ipcrm 命令用法详解:删除消息队列、信号集、或者共享内存标识...
- MapReduce 原理及执行过程
- 使用OpenSSL转换X509 PEM与PFX证书
- Git操作的基本命令
- 鲍威尔法c语言程序详解,鲍威尔法编程-powell法编程 c语言编程 c++6.0
- linux如何破解密码
- 快速缓解过敏的简单技巧
- android源代码文件结构
- linux如何查看证书过期时间,shell脚本:通过域名获取证书的过期时间
- 前端js华为云obs断点续传上传
- Log BERT 日志异常检测
- 2021.08.09【普及组】模拟赛C组比赛总结
- SAP之Suse For SAP 12 sp5安装教程(超详细)
- (转载)云计算系统测试
- ArcGIS基础实验操作100例--实验24提取栅格独立格网面
热门文章
- 码农的自我修养 - 关于ARM你需要知道的
- 大家小心了,做寄生虫排名骗子
- 深信服2008校园招聘笔试题
- matlab ifft 后是复数,在matlab和numpy中使用ifft会产生不同的结果
- 计算该年该月该日天数 一年中有 12 个月,而每个月的天数是不一样的。其中大月 31 天,分别为 1,3,5,7,8,10,12 月,小月 30 天,分别 为 4,6,9,11 月。
- node.js解析word文档
- 张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士
- 2017最新qq第三方登陆教程
- wamp环境二次配置
- ftp下载工具绿色版,ftp下载工具有绿色版的吗?教程详解