题解 | #试卷发布当天作答人数和平均分#

试卷发布当天作答人数和平均分

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 ; 
不足之处,欢迎指正



全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务