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

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

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

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 12:10
点赞 评论 收藏
分享
06-18 13:28
已编辑
门头沟学院 Web前端
爱睡觉的冰箱哥:《给予你300的工资》,阴的没边了
点赞 评论 收藏
分享
风中翠竹:真的真的真的没有kpi。。。面试官是没有任何kpi的,捞是真的想试试看这个行不行,碰碰运气,或者是面试官比较闲现在,没事捞个人看看。kpi算HR那边,但是只有你入职了,kpi才作数,面试是没有的。
双非有机会进大厂吗
点赞 评论 收藏
分享
评论
3
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务