题解 | 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


全部评论

相关推荐

最近和朋友聊天,她说了句让我震惊的话:"我发现我连周末点外卖都开始'最优解'了,一定要赶在高峰期前下单,不然就觉得自己亏了。"这不就是典型的"班味入侵"吗?工作思维已经渗透到生活的方方面面。
小型域名服务器:啊?我一直都这样啊?我还以为是我爱贪小便宜呢?每次去实验室都得接一杯免费的开水回去,出门都得规划一下最短路径,在宿舍就吃南边的食堂,在实验室就吃北边的食堂,快递只有顺路的时候才取。
点赞 评论 收藏
分享
过往烟沉:我说什么来着,java就业面就是广!
点赞 评论 收藏
分享
7 收藏 评论
分享
牛客网
牛客企业服务