题解 | #试卷发布当天作答人数和平均分#

试卷发布当天作答人数和平均分

http://www.nowcoder.com/practice/5b58e89556dc4153a79d8cf8c08ba499

看到三张表想到连接表,观察user_info和examination_info表原则上按顺序不重复,起辅助作用,而exam_record是主要信息表,则选择exam_record为主表join连接其余两表。我们可以先把需要的信息查询出来看看结果如何再进行分析。

select er.uid ,level , er.exam_id, tag, release_time, start_time,submit_time ,score
from exam_record er 
join examination_info ei on er.exam_id =ei.exam_id
join user_info ui on er.uid =ui.uid

部分结果如下: alt

题目要求:请计算每张SQL类别试卷发布后,当天5级以上的用户作答的人数uv和平均分avg_score,按人数降序,相同人数的按平均分升序。

我们加筛选条件:

where tag ='SQL'  ##类别为sql试卷
and submit_time > release_time  ##表明作答时间在发布时间后
and DATE_FORMAT(submit_time,'%Y%m%d')=DATE_FORMAT(release_time,'%Y%m%d')  ##当天作***d level >5  ##5级以上

结果如下:alt

我们看到uid有重复的,计算人数时需要distinct去重,平均分直接用avg() ,取一位小数用round()。

根据exam_id分组即可得到答案:

#最终结果:
select  er.exam_id ,count(DISTINCT er.uid) uv , round(avg(score),1) avg_score
from exam_record er 
join examination_info ei on er.exam_id =ei.exam_id
join user_info ui on er.uid =ui.uid
where tag ='SQL'
and submit_time > release_time
and DATE_FORMAT(submit_time,'%Y%m%d')=DATE_FORMAT(release_time,'%Y%m%d')
and level >5
group by er.exam_id
order by uv desc , avg_score asc

全部评论

相关推荐

09-27 10:54
重庆大学 C++
人已微死:致敬传奇耐测王。
投递小米集团等公司10个岗位
点赞 评论 收藏
分享
尊尼获获:闺蜜在哪?
点赞 评论 收藏
分享
服从性笔试吗,发这么多笔,现在还在发。
蟑螂恶霸zZ:傻 x 公司,发两次笔试,两次部门匹配挂,
投递金山WPS等公司10个岗位 >
点赞 评论 收藏
分享
3 收藏 评论
分享
牛客网
牛客企业服务