题解 | #近三个月未完成试卷数为0的用户完成情况#

近三个月未完成试卷数为0的用户完成情况

https://www.nowcoder.com/practice/4a3acb02b34a4ecf9045cefbc05453fa

1.select uid, count(score)exam_complete_cnt
2.from(select uid, submit_time,start_time,score, dense_rank()over(partition by uid order by date_format(start_time,'%Y-%m')desc ) as mon_rnk
3.from exam_record) t
4.where t.mon_rnk<=3
5.group by uid
6.having count(start_time)=count(score)
7.order by exam_complete_cnt desc,uid desc
#1.count里可以写start_time,submit_time,score,都是一样的,因为我们后面的筛选条件是没有未完成记录的用户,也就是说所有有开始时间的就肯定有提交时间,有提交时间就肯定有成绩,所以这三个的计数是一样的
#2.date_format里的参数只能用start——time,因为在这个子查询里我们没有做任何的筛选,submit里是有为null的,所以不行
#4.月份降序排名取前三名 就是近三个月的意思。 dense_rank是密集排序(1,2,2,3)所以即使有相同的月份 但是它的排名是一样的,取前三名不会导致数据有问题
#5.6.不能写where submit_time is not null,因为题目要求的是一次未提交记录也没有的用户, 所以需要在分组后计算。每次都完成了的用户 说明开始时间与分数或者提交时间的计数是一样的
全部评论

相关推荐

重生2012之我是java程序员:换个稍微正式点的照片吧
点赞 评论 收藏
分享
10-25 12:05
已编辑
湖南科技大学 Java
若梦难了:我有你这简历,已经大厂乱杀了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务