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

1.每日SQL----2024/11/7

题目:

计算用户次日留存率,即用户第二天继续登录的概率

表:

iddevice_iddate
121382024-05-03
232142024-05-09
332142024-06-15
465432024-08-13
523152024-08-13
623152024-08-14
723152024-08-15
832142024-05-09
932142024-08-15
1065432024-08-13
1123152024-08-13
1223152024-08-14
1323152024-08-15
1432142024-08-16
1532142024-08-18
1665432024-08-13
  • id 用户唯一标识符
  • device_id 用户登录使用的设备标识符
  • date 用户登录日期

你应该返回的结果:

avg_ret
0.3000

请认真思考后作答


解题思路

  1. 去重数据:首先,我们需要从原始数据中选择每个设备ID (device_id) 和对应的登录日期 (date),并去除重复项。这一步是为了确保每个设备在每个日期只有一条记录。

  2. 查找下一个登录日期:使用窗口函数 LEAD(),我们可以找到每个设备的下一个登录日期。LEAD() 函数会返回当前行之后的指定偏移量的行的值。这里我们将 LEAD() 应用在 date 列上,按 device_id 分区,并按 date 排序。

  3. 计算日期差:对于每一对连续的登录日期(当前日期 date1 和下一个日期 date2),我们使用 DATEDIFF() 函数计算它们之间的天数差。如果天数差为1,则表示用户在次日登录了。

  4. 计算次日留存率:使用 IF 语句,如果 DATEDIFF(date2, date1) = 1,则返回1,否则返回0。然后,对所有的这些0和1取平均值,得到次日留存率。

代码如下

select avg(if(datediff(date2, date1)=1, 1, 0)) as avg_ret
from (selectdistinct device_id,date as date1,lead(date) over (partition by device_id order by date) as date2from (select distinct device_id, datefrom user_detail) as uniq_id_date
) as id_last_next_date

运行结果如下

在这里插入图片描述

本题的重点是lead开窗函数的使用,你学会了吗?下期见~

后附建表语句

drop table if  exists `user_detail`;
CREATE TABLE `user_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`date` date NOT NULL
);INSERT INTO user_detail VALUES(1,2138,'2024-05-03');
INSERT INTO user_detail VALUES(2,3214,'2024-05-09');
INSERT INTO user_detail VALUES(3,3214,'2024-06-15');
INSERT INTO user_detail VALUES(4,6543,'2024-08-13');
INSERT INTO user_detail VALUES(5,2315,'2024-08-13');
INSERT INTO user_detail VALUES(6,2315,'2024-08-14');
INSERT INTO user_detail VALUES(7,2315,'2024-08-15');
INSERT INTO user_detail VALUES(8,3214,'2024-05-09');
INSERT INTO user_detail VALUES(9,3214,'2024-08-15');
INSERT INTO user_detail VALUES(10,6543,'2024-08-13');
INSERT INTO user_detail VALUES(11,2315,'2024-08-13');
INSERT INTO user_detail VALUES(12,2315,'2024-08-14');
INSERT INTO user_detail VALUES(13,2315,'2024-08-15');
INSERT INTO user_detail VALUES(14,3214,'2024-08-16');
INSERT INTO user_detail VALUES(15,3214,'2024-08-18');
INSERT INTO user_detail VALUES(16,6543,'2024-08-13');
http://www.lryc.cn/news/479774.html

相关文章:

  • 普通一本大二学生,软件工程,想考研985,想知道哪个大学的软件工程好,又不至于完全考不起的?
  • 「QT」几何数据类 之 QMatrix4x4 4x4矩阵类
  • 让Apache正确处理不同编码的文件避免中文乱码
  • 人员密集场所遇到突发火灾事故该如何应对
  • 使用QtWebEngine的Mac应用如何发布App Store
  • 微机原理与接口技术——中断系统与可编中断控制芯片8259A
  • 【JavaEE初阶 — 多线程】Thread类的方法&线程生命周期
  • 面试题分享11月7日
  • 数据结构_哈夫曼树及其应用
  • 从0开始学习机器学习--Day19--学习曲线
  • 2.索引:深入解析 B+ 树:原理、MySQL 应用及与其他数据结构的对比
  • [全网最细数据结构完整版]第六篇:3分钟带你吃透栈并模拟实现
  • 如何在 Docker 容器中启动 X11 图形界面程序
  • pycharm保存是自动格式化
  • .netCore WebAPI中字符串加密与解密
  • Next.js + Move 石头剪刀布
  • [面试]关于Redis 的持久化你了解吗
  • Systemd:tmpfiles
  • 【Flutter 内嵌 android 原生 View以及相互跳转】
  • python externally-managed-environment 外部管理环境
  • 前端 | MYTED单篇TED词汇学习功能优化
  • 64 mysql 的 表锁
  • 【计网不挂科】计算机网络期末考试——【选择题&填空题&判断题&简述题】题库(1)
  • ajax关于axios库的运用小案例
  • 微搭低代码入门01变量
  • 盘点2024年10款视频剪辑,哪款值得pick!!
  • 苹果手机照片批量删除:一键清理,释放空间
  • 《AI 大模型:重塑软件开发新生态》
  • uniapp(API-Promise 化)
  • 【考研数学 - 数二题型】考研数学必吃榜(数二)