题解 | 21. 试卷发布当天答题人数和平均分(不只是题解,很啰嗦,可能会浪费你的一些时间,谨慎选择是否点开.)

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

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

纯限时40分钟写的,因为昨天晚上有一题子查询思路错了,然后就回宿舍打游戏了,白天上课无聊就看了下那道题的讨论,算是巩固了一些子查询吧。

这题呢,因为看题目大纲是可以知道他是子查询的,所以思路很明确,先判断出哪些是需要子查询的,看了就发现三个表都有exam_id,所以子查询就当然要用到他了,那就先写出子查询的select,这样一步一步来就会豁然开朗,我一开始还以为他需要多嵌套一个子查询,所以留了很多位置,后来多看了会题目发现可以不用。其次还遇到了很多个坑,比如:1.有一个人 一张试卷做了两次,但是如果直接count会多一个出来,所以就需要去重。 2.牛客给的表格里面1001做9001的开始时间是在9001发布之前两个月开始的,这个也要注意,不然子查询里面的where容易写错。

还有就是自己的一些错误导致花费了一些时间在上面:1.在写uv具体该count谁的时候,因为有很多选项可以选择count,我一开始没犯傻了,选择去count(level),最后会少一个。2.还有就是当天答题的人数是有歧义的,我一开始比较傻,直接选择start_time去了,其实仔细看题会发现他还要求平均分的,那么肯定得是submit_time才能满足要求。

select er.exam_id,
       count(distinct ui.uid) as uv,
       round(sum(score) / count(submit_time),1) as avg_score
from exam_record er
join user_info ui using(uid)
where ui.level>5 and
      exam_id in (select exam_id
                  from exam_record 
                  join examination_info using(exam_id)
                  where DATE_FORMAT(submit_time,'%Y%m%d') = DATE_FORMAT(release_time,'%Y%m%d'))
group by er.exam_id
order by uv DESC,avg_score


全部评论

相关推荐

白火同学:先说结论,对于一份实习简历来说,整体还是挺不错的,技术深度和广度都到位,找到一份中小厂的实习没啥问题。 再说说能优化的点吧。 1、量化结果,项目中很多工作量化一下结果给面试官的感受会更直观一些,也能体现你对应用该项技术的理解(在众多技术为什么要用它,运行性能或者说开发效率往往是一大考虑指标;而不是说大家做这种功能都用它,所以我用它)。 2、突出亮点,项目中可以从“工作职责”择一些“个人亮点”另写一块,优先去写开发过程中遇到的xx问题,使用xx技术达到xx效果,针对性去写一些疑杂难的功能,能带出你个人思考和解决的过程。
点赞 评论 收藏
分享
评论
7
收藏
分享

创作者周榜

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