题解 | #未完成试卷数大于1的有效用户#

满足条件的用户的试卷完成数和题目练习数

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

```select er.uid,
	count(distinct if(year(er.submit_time)=2021,er.exam_id,null),er.submit_time) as exam_cnt,
	count(distinct if(year(pr.submit_time)=2021,pr.question_id,null),pr.submit_time) as question_cnt
from exam_record as er left join  practice_record as pr on er.uid = pr.uid
where er.uid in (
select er.uid
from
	exam_record as er 
	left join examination_info as ei on er.exam_id = ei.exam_id
	right join user_info as ui on er.uid = ui.uid
where difficulty = 'hard' and `level` = 7 and tag = 'SQL'
group by er.uid
having avg(score)>80
)
group by er.uid
order by exam_cnt, question_cnt desc;

注意: 不能直接count(distinct er.exam_id,er.submit_time) as exam_cnt和count(distinct pr.question_id,pr.submit_time) as question_cnt。 可以看到1006有一行在2021年刷了试卷,但是在2020年刷了题,对exam_cnt需要计算,但是对question_cnt不能计算。所以使用count(if)。 alt 另外不能再where后面加year(er.submit_time)=2021 and year(pr.submit_time)=2021。这样会直接把这行过滤掉。 因为对答案来说,同一个用户id刷同一套试卷再不同时间刷的需要多次计算。

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-02 17:28
25届每天都在焦虑找工作的事情0offer情绪一直很低落硬撑着面了一个岗位岗位有应酬的成分面试的时候hr给我出各种场景题问的问题比较犀利 有点压力面的感觉感觉有点回答不上来本来就压抑的情绪瞬间爆发了呢一瞬间特别想哭觉得自己特别没用没绷住掉眼泪了事后想想觉得自己挺有病的 真的破大防了
喜欢唱跳rap小刺猬...:我觉得没关系吧,之前有一次面试leader给我压力面,我顶住了压力,结果入职的时候发现组里氛围很差,果断跑路。其实从面试就能大概看出组的情况,面试体验好的组倒是不一定好,但是面试体验不好的组。。。就很难说
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
评论
点赞
1
分享

创作者周榜

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