邢台手机网站建设费用葛亚曦设计公司官网

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

邢台手机网站建设费用,葛亚曦设计公司官网,个人网站可以不备案吗,seo培训机构排名SQL 进阶刷题笔记 一、MySQL 进阶 这里主要是 MySQL 刷题相关笔记#xff0c;方便后面温习和查阅#xff0c;希望可以帮到大家#xff01;#xff01;#xff01; 题1 请计算每张SQL类别试卷发布后#xff0c;当天5级以上的用户作答的人数uv和平均分avg_score#xff0…SQL 进阶刷题笔记 一、MySQL 进阶 这里主要是 MySQL 刷题相关笔记方便后面温习和查阅希望可以帮到大家 题1 请计算每张SQL类别试卷发布后当天5级以上的用户作答的人数uv和平均分avg_score按人数降序相同人数的按平均分升序。 描述 问题分解 获取每张SQL类别试卷发布日期作为子查询 筛选试卷类别WHERE tag “SQL”获取试卷ID和发布日期SELECT exam_id, DATE(release_time) 筛选发布当天的作答记录WHERE (exam_id, DATE(start_time)) IN (…)筛选5级以上的用户AND uid IN (SELECT uid FROM user_info WHERE level 5)按试卷ID分组GROUP BY exam_id计算作答人数count( DISTINCT uid ) AS uv计算平均分保留1位小数ROUND(avg( score ), 1) AS avg_score 完整代码 SELECTexam_id,count( DISTINCT uid ) AS uv,ROUND(avg( score ), 1) AS avg_score FROM exam_record WHERE (exam_id, DATE(start_time)) IN (SELECT exam_id, DATE(release_time)FROM examination_info WHERE tag SQL ) AND uid IN ( SELECT uid FROM user_info WHERE level 5 ) GROUP BY exam_id ORDER BY uv DESC, avg_score ASC;题2 给你一张试卷作答记录表一张题目练习记录表请你查询出其中每张试卷和每道题目被作答过的人数和作答的次数最后按照人数和作答次数的顺序逆序排列 描述 问题分解 先统计试卷区每份试卷被回答的人数和次数 以试卷exam_id作为分组便于统计每份试卷被作答的人数和次数。知识点group by对于每一组即每一份试卷统计作答的人数即uid的数量要注意去重即同一人可能回答多次。知识点count()、distinct对于每一组即每一份试卷统计被作答次数只需要统计出现多少次即可不用去重。知识点count()对查询结果按照先uv再pv的降序排序order by uv desc, pv desc 再统计题目区每份试卷被回答的人数和次数 以试卷question_id作为分组便于统计每个题目被作答的人数和次数。知识点group by对于每一组即每个题目统计作答的人数即uid的数量要注意去重即同一人可能回答多次。知识点count()、distinct对于每一组即每个题目统计被作答次数只需要统计出现多少次即可不用去重。知识点count()对查询结果按照先uv再pv的降序排序order by uv desc, pv desc 从试卷区的选择中选出全部与从题目区的选择中选出的全部合并select * from () exam union select * from () practice。知识点union 完整代码 select * from (select exam_id as tid,count(distinct uid) uv,count(*) pvfrom exam_recordgroup by exam_idorder by uv desc ,pv desc ) a union all select * from (select question_id as tid,count(distinct uid) uv,count(*) pvfrom practice_recordgroup by question_idorder by uv desc ,pv desc ) b 题3 请写出一个SQL实现输出2021年里所有每次试卷得分都能到85分的人以及至少有一次用了一半时间就完成高难度试卷且分数大于80的人的id和活动号按用户ID排序输出。 描述 问题分解 筛选2021年每次试卷得分都大于等于85的人和字符串’activity1’ 按照uid进行分组划分统计每个用户的得分情况。知识点group by选出提交时间在2021年的试卷。知识点select…from…where…、year()对于每组要求判断最小得分不小于85。知识点having、min() 筛选2021年至少有一次用了一半时间就完成高难度试卷且分数大于80的人和字符串’activity2’ 试卷信息和考试信息分布在两个表中须将其通过exam_id连接起来。知识点join…on…从连接后的两个表格中满足四个条件的不重复的用户ID因为只要求至少一次下述情况(知识点distinct、where…and…) 提交时间是2021年。year(e_r.submit_time) 2021试卷难度是困难。e_i.difficulty hard得分大于80。e_r.score 80只用了试卷要求时间一半不到的时间就完成。timestampdiff(minute, e_r.start_time, e_r.submit_time) * 2 e_i.duration 将两个筛选合并。知识点union all按照用户ID排序输出。知识点order by uid 完整代码 select uid , activity1 as activity from exam_record where year(submit_time) 2021 group by uid having min(score) 85 union all select distinct b.uid, activity2 as activity from examination_info a join exam_record b on a.exam_id b.exam_id where year(b.submit_time) 2021 and a.difficulty hard and b.score 80 and timestampdiff(minute,b.start_time,b.submit_time) * 2 a.duration order by uid题4 找到高难度SQL试卷得分平均值大于80并且是7级的红名大佬统计他们的2021年试卷完成数和题目练习数; 结果按试卷完成数升序按题目练习数降序。 描述 问题分解 找出高难度SQL试卷得分平均值大于80分的7级用户生成子表t_user_id 内连接试卷作答表、试卷信息表、用户信息表exam_record JOIN examination_info USING(exam_id) JOIN user_info USING(uid)筛选出目标用户WHERE difficulty‘hard’ and tag‘SQL’ and level7按用户分组GROUP BY uid筛选平均分大于80的分组用户HAVING AVG(score)80 统计每个用户2021年的试卷完成数生成子表t_exam_cnt 筛选作答时间和已完成WHERE YEAR(submit_time)2021 AND submit_time IS NOT NULL按用户分组GROUP BY uid统计试卷完成数count(exam_id) as exam_cnt 统计每个用户2021年的试题作答数生成子表t_question_cnt 筛选作答时间WHERE YEAR(submit_time)2021按用户分组GROUP BY uid统计试题作答数count(question_id) as question_cnt 关联三张表 内连接t_user_id和t_exam_cnt因为用户属性条件必须满足题目又要求了只输出有试卷完成记录的用户t_user_id JOIN t_exam_cnt USING(uid)左连接t_question_cnt因为只要满足上面条件的结果即使无试题作答记录也输出LEFT JOIN t_question_cnt USING(uid) 特殊处理试题作答数可能为0的情况此时关联结果中试题作答数为NULLIFNULL(question_cnt, 0) as question_cnt 完整代码 SELECT uid, exam_cnt, IFNULL(question_cnt, 0) as question_cnt FROM (SELECT uidFROM exam_recordJOIN examination_info USING(exam_id)JOIN user_info USING(uid)WHERE difficultyhard and tagSQL and level7GROUP BY uidHAVING AVG(score)80 ) as t_user_id JOIN (SELECT uid, count(exam_id) as exam_cntFROM exam_recordWHERE YEAR(submit_time)2021 AND submit_time IS NOT NULLGROUP BY uid ) as t_exam_cnt USING(uid) LEFT JOIN (SELECT uid, count(question_id) as question_cntFROM practice_record WHERE YEAR(submit_time)2021GROUP BY uid ) as t_question_cnt USING(uid) ORDER BY exam_cnt, question_cnt desc;关注林哥持续更新哦★,°:.☆(▽)/$:.°★ 。