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

计算用户的平均次日留存率

http://www.nowcoder.com/practice/126083961ae0415fbde061d7ebbde453

知识

外连接

只限制一张表中的数据必须满足连接条件,而另一张表中数据可以不满足连接条 件。

外连接的语法格式为:

SELECT … FROM 表1 LEFT | RIGHT [OUTER] 
JOIN 表2 ON <连接条件>
  • left join: 包含左表的所有行,对应的右表行可能为空
  • right join: 包含右表的所有行,对应的左表行可能为空
  • full join: 只包含左右表都匹配并且不为空的行

例52.查询学生的选课情况,包括选修了课程的学生和没有选修课程的学生。

SELECT 学生表.学号, 姓名, 课程号, 成绩
FROM 学生表 LEFT JOIN 成绩表
ON 学生表.学号 = 成绩表.学号

例53.查询所有学生的学号、姓名、班号和班名,即使该学生无班号也列出学生。

SELECT 学号, 姓名,学生表.班号, 班名
FROM 学生表 LEFT JOIN 班级表
ON 学生表.班号 = 班级表.班号

例54.查询21226P班没有选课的学生,列出学生姓名和性别。

SELECT 姓名,性别
FROM 学生表 S LEFT JOIN 成绩表 g 
ON S.学号 = g.学号
WHERE 班号 = '21226P'
AND g.学号 IS NULL

例55. 统计21226P班每个学生的选课门数,包括没有选课的学生。

SELECT S.学号 AS 学号,
COUNT(课程号) AS 选课门数
FROM 学生表 S LEFT JOIN 成绩表 g 
ON S.学号 = g.学号
WHERE 班号 = '21226P’
GROUP BY S.学号

解题

题目中的“用户在某天刷题后第二天还会再来刷题”需要通过比较同一个device_id在date和date+1两天都有答题数据。

需要通过datediff(date1,date2)=1来判断是否连续两天都有答题数据。

因为需要计算用户的平均次日留存率,如果用户次日没有留存,则因为不符合连接条件而为空,所以需要通过外连接来实现。除数就是有数据的COUNT DISTINCT值,被除数就是全数据的COUNT DISTINCT值。

题解

题目:现在运营想要查看用户在某天刷题后第二天还会再来刷题的平均概率。请你取出相应数据。

SELECT count(distinct q2.device_id,q2.date)/count(distinct q1.device_id,q1.date) as avg_ret
FROM question_practice_detail as q1 left outer join question_practice_detail as q2 
on q1.device_id=q2.device_id and datediff(q2.date,q1.date)=1; 

示例:question_practice_detail

根据示例,你的查询应返回以下结果:

【题解】SQL 入门 文章被收录于专栏

SQL 入门 题解

全部评论
感谢,看了蛮多思路,你的思路是最好理解的
3 回复 分享
发布于 2022-06-04 16:32
请教大佬,select里面为什么不能是count(distinct table2.device_id) / count(distinct table1.device_id),我觉得看不出区别,但是这样写确实会报错
2 回复 分享
发布于 2022-09-18 13:31 四川
感谢,这个方便很多
点赞 回复 分享
发布于 2024-06-13 16:38 广东

相关推荐

hanliu:1. 排版与格式问题字体与对齐问题:标题和内容的字体大小差异不够明显,无法迅速吸引目光。某些文字看起来有些拥挤(比如校园经历中的“班委成员”部分)。2. 内容逻辑性模块顺序问题:实习经历放在较靠后的位置,实际上这部分内容对应聘来说更重要,建议提前突出。细节表述不够突出:比如教育背景部分的专业课程仅仅列出名字,没有说明自己在这些课程中表现如何或者掌握了什么技能,缺乏量化描述。多余内容:例如“班委成员”和“宣传委员”这类校园经历,叙述过于普通,缺乏和岗位相关的实质性贡献。,建议简写。3. 措辞专业性表达不够精准:例如“协助班长与团支书更好地为同学服务”显得较为笼统,没有实际成果的体现。用词重复:如“学习了焊接”“学习了光检”等重复词语较多,缺乏丰富的动词来展示个人能力(如“负责”“优化”“改进”等)。技能展示不足:虽然列出了UG和CAD证书,但没有明确提到这些技能如何在实际工作中发挥作用。4. 技能匹配度技能深度不足:虽然列出了掌握的软件和技术,但没有描述技能水平(如“熟练掌握”“精通”),也没有具体案例支持这些技能。缺乏岗位导向性:比如针对机械设计与制造方向,实习经历提到了“E6尾灯项目”,但没有详细说明自己在其中的技术贡献,可能会显得经验描述泛泛而谈。5. 自我评价问题表达空泛:如“具有良好的沟通协调能力”“责任心强”之类的描述太常见,没有让人眼前一亮的特点。缺乏成果支持:自我评价中的能力没有用具体项目、经历或成就来验证,可信度较弱。 兄弟加油
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
44
7
分享

创作者周榜

更多
牛客网
牛客企业服务