题解 | #近三个月未完成试卷数为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,因为题目要求的是一次未提交记录也没有的用户, 所以需要在分组后计算。每次都完成了的用户 说明开始时间与分数或者提交时间的计数是一样的