sql函数练习题

这篇具有很好参考价值的文章主要介绍了sql函数练习题。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1. 计算用户8月每天的练题数量

题目:现在运营想要计算出2021年8月每天用户练习题目的数量,请取出相应数据。

示例:question_practice_detail

id device_id question_id result date
1 2138 111 wrong 2021-05-03
2 3214 112 wrong 2021-05-09
3 3214 113 wrong 2021-06-15
4 6543 111 right 2021-08-13
5 2315 115 right 2021-08-13
6 2315 116 right 2021-08-14
7 2315 117 wrong 2021-08-15
……

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

day question_cnt
13 5
14 2
15 3
16 1
18 1
#法一:like运算符
select
    day(date) as day,
    count(question_id) as question_cnt
from question_practice_detail
where date like '2021-08%'
group by day(date);

#法二:substring提取日期
select
    day(date) as day,
    count(question_id) as question_cnt
from question_practice_detail
where substring(date,1,7) = '2021-08'
group by day(date);

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

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

示例:question_practice_detail

id device_id quest_id result date
1 2138 111 wrong 2021-05-03
2 3214 112 wrong 2021-05-09
3 3214 113 wrong 2021-06-15
4 6543 111 right 2021-08-13
5 2315 115 right 2021-08-13
6 2315 116 right 2021-08-14
7 2315 117 wrong 2021-08-15
……

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

avg_ret
0.3000

题目分析

所谓次日留存,指的是同一用户(在本题中则为同一设备,即device_id)在当天和第二天都进行刷题。注意,在这题我们不关心同一用户(设备)在这天答了什么题、答题结果如何,只关心他是否答题,因此对于这题来说存在重复的数据(如下图红框所示),需要使用 DISTINCT 去重sql函数练习题

而次日留存率可以这样表示:
sql函数练习题
具体而言,使用两个子查询,查询出两个去重的数据表,并使用条件(q2.date应该是q1.date的后一天)进行筛选,如下所示(数据未显示完全,从左至右顺序,列表名为 q1.device_id, q1.date, q2.device_id, q2.date)
sql函数练习题

因为使用的是q1左级联q2,所以q1的所有信息是显示的;而q2中只显示留存的信息,否则为null。

最后,分别统计q1.device_id 和 q2.device_id 作去重后的所有条目数和去重后的次日留存条目数,即可算出次日留存率。

SELECT 
    COUNT(q2.device_id) / COUNT(q1.device_id) AS avg_ret 
FROM 
    (SELECT DISTINCT device_id, date FROM question_practice_detail)as q1
LEFT JOIN
    (SELECT DISTINCT device_id, date FROM question_practice_detail) AS q2
ON q1.device_id = q2.device_id AND q2.date = DATE_ADD(q1.date, interval 1 day)
# DATE_ADD(q1.date, interval expr type):返回一个日期/时间值加上一个时间间隔expr后的时间值
# DATEDIFF(date1, date2):返回起始时间date1和结束时间date2之间的天数

3. 找出每个学校GPA最低的同学

题目:现在运营想要找到每个学校gpa最低的同学来做调研,请你取出每个学校的最低gpa。

示例:user_profile

id device_id gender age university gpa active_days_within_30 question_cnt answer_cnt
1 2138 male 21 北京大学 3.4 7 2 12
2 3214 male 复旦大学 4 15 5 25
3 6543 female 20 北京大学 3.2 12 3 30
4 2315 female 23 浙江大学 3.6 5 1 2
5 5432 male 25 山东大学 3.8 20 15 70
6 2131 male 28 山东大学 3.3 15 7 13
7 4321 female 26 复旦大学 3.6 9 6 52

根据示例,你的查询结果应参考以下格式,输出结果按university升序排序:文章来源地址https://www.toymoban.com/news/detail-468876.html

device_id university gpa
6543 北京大学 3.2000
4321 复旦大学 3.6000
2131 山东大学 3.3000
2315 浙江大学 3.6000
#法一
select
    u.device_id,
    u.university,
    u.gpa
from
    user_profile u
    #先查出每个学校最低的gpa
    join (select university ,min(gpa) gpa from user_profile u group by university) a
    on u.university = a.university and u.gpa = a.gpa
order by university;
#法二
select 
	device_id,university,gpa
from 
	user_profile
where 
	#直接条件判断
	(university,gpa) in (select university,min(gpa) from user_profile group by university)
order by university;

到了这里,关于sql函数练习题的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • sql练习题

    DQL练习1-学生表     创建如下学生表      create table student(     id int,     name varchar(20),     gender varchar(20),     chinese int,     math int,     english int     );                   insert into student values      (1,\\\'张明\\\',\\\'男\\\',89,78,90),     (2,\\\'李进\\\',\\\'男\\\',67,53,95),     (3,\\\'王五

    2024年02月16日
    浏览(30)
  • 50道SQL练习题

    https://www.bilibili.com/video/BV14h411R7F6/?p=4vd_source=76a21f3936db28f5e63b70544272d65e https://www.cnblogs.com/Diyo/p/11424844.html https://zhuanlan.zhihu.com/p/113173133 方法1:自连接 思路:先使用自连接score表找到01\\\"课程比\\\"02\\\"课程成绩高的的学生id,然后关联学生表获取学生信息 方法二: 长形数据变成宽型数

    2024年02月09日
    浏览(41)
  • sql-50练习题16-20

    sql真的非常灵活,一个题目可能有很多很多种解法,我记录的只是我自己的一个解题思路,如果大家有更好的不同解法欢迎在评论区一起探讨 ps:有些题可能解法会重复,比如求大于,我们下一个题可能是求小于,大家如果第一遍没有做出来,看了我写的之后有了思路,可以

    2024年02月06日
    浏览(33)
  • sql-50练习题11-15

    sql真的非常灵活,一个题目可能有很多很多种解法,我记录的只是我自己的一个解题思路,如果大家有更好的不同解法欢迎在评论区一起探讨 ps:有些题可能解法会重复,比如求大于,我们下一个题可能是求小于,大家如果第一遍没有做出来,看了我写的之后有了思路,可以

    2024年02月06日
    浏览(29)
  • sql-50练习题6-10

    sql真的非常灵活,一个题目可能有很多很多种解法,我记录的只是我自己的一个解题思路,如果大家有更好的不同解法欢迎在评论区一起探讨 ps:有些题可能解法会重复,比如求大于,我们下一个题可能是求小于,大家如果第一遍没有做出来,看了我写的之后有了思路,可以

    2024年02月08日
    浏览(32)
  • 【MySQL】- 05 sql 语句练习题

    查询结果就不放了,语句是否成功运行,结果是否正确都容易自行判断 –1. 学生表 Student(s_id,s_name,s_birth,s_sex) --学生编号,学生姓名, 出生年月,学生性别 –2. 课程表 Course(c_id,c_name,t_id) – --课程编号, 课程名称, 教师编号 –3. 教师表 Teacher(t_id,t_name) --教师编号,教师姓名 –4. 成

    2024年02月08日
    浏览(41)
  • 【SQL每日一练】分组过滤练习题

    题目:现在运营想查看每个学校用户的平均发贴和回帖情况,寻找低活跃度学校进行重点运营,请取出平均发贴数低于5的学校或平均回帖数小于20的学校。 代码如下: WHERE 无法与合计函数一起使用; SQL语句执行顺序 (8) SELECT (9) DISTINCT (1) FROM (3) JOIN (2) ON (4) WHERE (5) GR

    2024年04月23日
    浏览(21)
  • Hive SQL必刷练习题:留存率问题(*****)

    首次登录算作当天新增,第二天也登录了算作一日留存。可以理解为,在10月1号登陆了。在10月2号也登陆了,那这个人就可以算是在1号留存 今日留存率 = (今日登录且明天也登录的用户数) / 今日登录的总用户数 * 100% ​ 这类问题主要 借助left join ,根据原表的数据,先去找

    2024年04月24日
    浏览(19)
  • 【MySQL】- 05 sql 语句练习题(第二部分)

    20、 查询学生的总成绩并进行排名 21、 查询不同老师所教不同课程平均分从高到低显示 22、 查询所有课程的成绩第2名到第3名的学生信息及该课程成绩 23、 统计各科成绩各分数段人数:课程编号,课程名称,[100-85],[85-70],[70-60],[0-60]及所占百分比 24、 查询学生平均成绩及其名次

    2024年02月09日
    浏览(30)
  • Hive SQL必刷练习题:连续问题 & 间断连续(*****)

    1) 连续问题:找出连续三天(或者连续几天的啥啥啥)。 2) 间断连续:统计各用户连续登录最长天数,间断一天也算连续,比如1、3、4、6也算登陆了6天 这两类问题,都是涉及到连续,只不过连续类问题只要判断出来相邻的时间是和当前行的时间挨着即可,而间断连续,

    2024年03月27日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包