题解 | #试卷发布当天作答人数和平均分#
试卷发布当天作答人数和平均分
http://www.nowcoder.com/practice/5b58e89556dc4153a79d8cf8c08ba499
明确题意:
计算每张SQL类别试卷发布后,当天5级以上的用户作答的人数uv和平均分avg_score,按人数降序,相同人数的按平均分升序
问题拆解:
- 本题主要是考察知识点:group by、date_format等
- DATE_FORMAT(submit_time, "%Y-%m-%d" ) 返回的是2021-09-01这样;
- 先查出level>5的用户的作答记录(不用管score是否为NULL),得到表t2
- 查出SQL的试卷信息得到表t1
- t1需要与t2关联,group by exam_id,分组统计和聚合
- uv=去重后的uid总数,注意这个陷阱
- avg_score = score的sum求和 / 非NULL的score总个数 ,注意这个陷阱
代码实现:
select t1.exam_id , count(distinct t2.uid) as uv , -- 注意 此处是distinct round(sum(t2.score) / count(t2.score),1) as avg_score -- 注意此处是count(score),实际不包含score是null的记录 from ( select exam_id , DATE_FORMAT(release_time,'%Y-%m-%d') as release_date from examination_info where tag = 'SQL' )t1 join ( select * from exam_record where uid in (select uid from user_info where level > 5) )t2 on t1.exam_id = t2.exam_id and t1.release_date = DATE_FORMAT(t2.submit_time,'%Y-%m-%d') group by t1.exam_id order by uv desc ,avg_score asc ;不足之处,欢迎指正