SQL 29 计算用户的平均次日留存率题解

问题截图如下:
在这里插入图片描述
SQL建表代码:

drop table if exists `user_profile`;
drop table if  exists `question_practice_detail`;
drop table if  exists `question_detail`;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`gpa` float,
`active_days_within_30` int ,
`question_cnt` int ,
`answer_cnt` int 
);
CREATE TABLE `question_practice_detail` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`question_id`int NOT NULL,
`result` varchar(32) NOT NULL,
`date` date NOT NULL
);
CREATE TABLE `question_detail` (
`id` int NOT NULL,
`question_id`int NOT NULL,
`difficult_level` varchar(32) NOT NULL
);

INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学',3.4,7,2,12);
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学',4.0,15,5,25);
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学',3.2,12,3,30);
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学',3.6,5,1,2);
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学',3.8,20,15,70);
INSERT INTO user_profile VALUES(6,2131,'male',28,'山东大学',3.3,15,7,13);
INSERT INTO user_profile VALUES(7,4321,'male',28,'复旦大学',3.6,9,6,52);
INSERT INTO question_practice_detail VALUES(1,2138,111,'wrong','2021-05-03');
INSERT INTO question_practice_detail VALUES(2,3214,112,'wrong','2021-05-09');
INSERT INTO question_practice_detail VALUES(3,3214,113,'wrong','2021-06-15');
INSERT INTO question_practice_detail VALUES(4,6543,111,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(5,2315,115,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(6,2315,116,'right','2021-08-14');
INSERT INTO question_practice_detail VALUES(7,2315,117,'wrong','2021-08-15');
INSERT INTO question_practice_detail VALUES(8,3214,112,'wrong','2021-05-09');
INSERT INTO question_practice_detail VALUES(9,3214,113,'wrong','2021-08-15');
INSERT INTO question_practice_detail VALUES(10,6543,111,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(11,2315,115,'right','2021-08-13');
INSERT INTO question_practice_detail VALUES(12,2315,116,'right','2021-08-14');
INSERT INTO question_practice_detail VALUES(13,2315,117,'wrong','2021-08-15');
INSERT INTO question_practice_detail VALUES(14,3214,112,'wrong','2021-08-16');
INSERT INTO question_practice_detail VALUES(15,3214,113,'wrong','2021-08-18');
INSERT INTO question_practice_detail VALUES(16,6543,111,'right','2021-08-13');
INSERT INTO question_detail VALUES(1,111,'hard');
INSERT INTO question_detail VALUES(2,112,'medium');
INSERT INTO question_detail VALUES(3,113,'easy');
INSERT INTO question_detail VALUES(4,115,'easy');
INSERT INTO question_detail VALUES(5,116,'medium');
INSERT INTO question_detail VALUES(6,117,'easy');

题目解析:该题目解法有多种,其中一种就是求出第二天的还在做题的人数量,并将其做成一个新的表格,再将其和第一天的相除,就得到了结果了。
题目解法:

select
    count(date2) / count(date1) as avg_ret
from
    (
        select distinct
            qpd.device_id,
            qpd.date as date1,
            uniq_id_date.date as date2
        from
            question_practice_detail as qpd
            left join (
                select distinct
                    device_id,
                    date
                from
                    question_practice_detail
            ) as uniq_id_date on qpd.device_id = uniq_id_date.device_id
            and date_add (qpd.date, interval 1 day) = uniq_id_date.date
    ) as id_last_next_date

这种解法的关键在我看来,就是date_add (qpd.date, interval 1 day) 这个函数,这个函数是将日期往后加一天的意思,这样就能查到同样设备的第二天的做题情况了。

DATE_ADD(qpd.date, INTERVAL 1 DAY) 表示将 qpd.date 所表示的日期增加 1 天。

DATE_ADD() 是 MySQL 中的一个日期函数,用于向指定的日期添加指定的时间间隔。其语法为:DATE_ADD(date, INTERVAL expr type),其中:

  • date:是合法的日期表达式,表示要操作的起始日期。
  • expr:表示要添加的时间间隔的值。
  • type:指定时间间隔的单位,可以是DAY(天)、HOUR(小时)、MINUTE(分钟)、SECOND(秒)、WEEK(周)、MONTH(月)、QUARTER(季度)、YEAR(年)等。

例如,如果当前 qpd.date 的值是 2024-06-28,那么 DATE_ADD(qpd.date, INTERVAL 1 DAY) 的结果将是 2024-06-29

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/753693.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

国外问卷调查,让你远离酷暑的赚钱新方式

大家好,我是汇舟问卷,一家专注于国外问卷调查领域的互联网企业。随着夏季的到来,高温酷暑无疑给许多人的日常工作带来了极大的不便与挑战。 在这样的季节里,我们都在寻求一种既能实现经济收益又能避免高温炙烤的工作模式。 在此…

Davtest一键远程编辑远程Web服务器上的文件(KALI工具系列三十三)

目录 1、KALI LINUX 简介 2、Davtest 工具简介 3、信息收集 3.1 目标IP(服务器) 3.2 kali的IP 4、操作实例 4.1 常见漏洞扫描 4.2 身份验证 4.3 特定扫描 4.4 输出结果 5、总结 1、KALI LINUX 简介 Kali Linux 是一个功能强大、多才多艺的 Linux 发行版 &…

windows11 OneDrive禁止开机自启动。

1、先上个图: 开机默认自启,然后设置中,也没有找到可以设置的。 2、然后我们通过任务管理器来处理,右键任务栏: 打开任务管理器: 选中OneDrive,然后点击【禁 用】按钮即可。 或者鼠标右键&…

《分析模式》漫谈08-单继承不是“唯一继承”

DDD领域驱动设计批评文集 做强化自测题获得“软件方法建模师”称号 《软件方法》各章合集 《分析模式》第2章这一段: 划线处的single inheritance,2004中译本的翻译: 翻译为“单继承”,是正确的。 2020中译本的翻译&#xff1a…

Python 中的抽象语法树

Abstract Syntax Trees in Python 注:机翻,未校对。 Requirement: All examples are compatible with at least Python v3.6, except for using ast.dump() with the attribute indent which has been added in Python v3.9. 要求:所有示例至…

R语言 | 使用ggplot绘制柱状图,在柱子中显示数值和显著性

原文链接:使用ggplot绘制柱状图,在柱子中显示数值和显著性 本期教程 获得本期教程示例数据,后台回复关键词:20240628。(PS:在社群中,可获得往期和未来教程所有数据和代码) 往期教程…

【websocket】websocket网课视频记录

仅个人方便回顾。 【WebSocket入门与案例实战-哔哩哔哩】 https://b23.tv/2p1f9t2 课程对应代码仓库: https://gitee.com/duoli-java/websocket-demo.git

【机器学习项目实战(二)】基于朴素贝叶斯的中文垃圾短信分类

完整代码、数据集和相应的报告 链接已经放在了正文最下方, 供大家参考学习 摘要 ​ 本文探讨了中文垃圾短信分类的问题,通过收集实际数据集,运用多种机器学习算法进行分类,并对比了不同算法在垃圾短信分类任务上的性能。本研究旨在提高中文垃圾短信的识别准确率,为构建更…

elasticsearch导出和导入数据

这里我使用的是离线操作的方式, 前提:安装了node, 安装elasticdump命令: npm install elasticdump -g 安装成功后进入elasticdump所在的目录: cd /usr/local/nodejs/lib/node_modules/elasticdump/bin 导出目标索引的映射结构…

Keil5中:出现:failed to execute ‘...\ARMCC\bin\ArmCC‘

点三个点,去自己的磁盘找自己的ARM\ARMCC\bin

写一个坏越的小世界(六)

blog基本已经接近尾声了,稍微再润色下。比如天气模块 这边加一个天气小图标,应该会好点吧~ 当不同天气的时候可以显示不同的图标 介绍这边加了个滚球特效。虽然看着还不是很好看,先凑合着吧 整了个开关灯按钮,可以切换黑白主题 …

WavRx:新型语音健康诊断模型

近年来,语音作为一种有前景的疾病诊断和远程健康监测手段已经出现。语音健康诊断通常基于这样一个假设:即影响发音和/或呼吸系统的疾病会导致人类语音信号中出现非典型模式。这种异常可能由多种原因造成,例如神经肌肉控制受损或声道和肺部发炎…

【Python】已解决:Python正确安装文字识别库EasyOCR

文章目录 一、分析问题背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决:Python正确安装文字识别库EasyOCR 一、分析问题背景 在使用Python进行图像处理和文字识别时,EasyOCR是一个流行的库,它基于PyTorch&…

互联网直播/点播技术与平台创新应用:视频推拉流EasyDSS案例分析

随着互联网技术的快速发展,直播/点播平台已成为信息传播和娱乐的重要载体。特别是在电视购物领域,互联网直播/点播平台与技术的应用,不仅为用户带来了全新的购物体验,也为商家提供了更广阔的营销渠道。传统媒体再一次切实感受到了…

同步模式之保护性暂停模式

1. Guarded Suspension:一个线程需要等待另一个线程的执行结果 2. 理解 一个线程需要将结果传递给另一个线程,将这两个线程关联到到同一个 GuardedObject 如果需要源源不断地传递结果,需要使用消息队列(生产者-消费者模型&…

基于 SpringBoot + Vue 的图书购物商城项目

本项目是一个基于 SpringBoot 和 Vue 的图书购物商城系统。系统主要实现了用户注册、登录,图书浏览、查询、加购,购物车管理,订单结算,会员折扣,下单,个人订单管理,书籍及分类管理,用…

用英文介绍芝加哥(1):Making Modern Chicago Part 1 Building a Boomtown

Making Modern Chicago | Part 1: Building a Boomtown Link: https://www.youtube.com/watch?vpNdX0Dm-J8Y&listPLmSQiOQJmbZ7TU39cyx7gizM9i8nOuZXy&index4 Summary Summary of Chicago’s History and Development Urban Planning and Growth Chicago, often r…

华为OceanStor磁盘阵列存储恢复出厂设置命令 LUN不处于在线状态,不能执行此操作解决方案

环境 OceanStor S2600T V2老版本 客户现场有一台Oceanstor 2600 V2的存储,因和另一台磁盘扩展框做了跨设备LUN需要进行配置清除,配置结束后需要重新划分存储空间并对接服务器,保证业务能够正常上线!在清除配置回退的过程中&#…

微服务框架中Nacos的个人学习心得

微服务框架需要学习的东西很多,基本上我把它分为了五个模块: 第一:微服务技术模块 分为三个常用小模块: 1.微服务治理: 注册发现 远程调用 配置管理 网关路由 2.微服务保护: 流量控制 系统保护 熔断降级 服…

个微API二次开发

通过 E云API 可以实现 个性化微信功能 (例:营销系统、云发单助手、社群管家webot、客服系统等),用来自动管理微信消息。 可开发的功能包括但不限于: 好友管理: 添加好友、删除好友、修改备注、创建标签、获…