题解 | #试卷完成数同比2020年的增长率及排名变化#

试卷完成数同比2020年的增长率及排名变化

https://www.nowcoder.com/practice/13415dff75784a57bedb6d195262be7b

思路:分别统计20,21年上半年的各类试卷的做完次数,和排名。合并后,计算增长率和排名变化

  • 统计20,21年上半年信息,建立子表
    • 联结:using
    • 各类试卷分组:group by tag,year
    • 完成次数:count()
    • 排名:dense_rank() over( order by 完成次数 desc) , 排名不需要tag分组
    • 条件:前六个月:where month()<7
  • 根据上面子表,计算增长率,和排名变化
    • 分别取20/21年的值:
      • exam_cnt as exam_cnt_20
      • lead(exam_cnt) over(partition by tag order by start_year) as exam_cnt_21
      • ranking as exam_cnt_20
      • lead(ranking) over(partition by tag order by start_year) as exam_cnt_21
    • 增长率:(2021完成数-2020完成数)/2020完成数
      • 百分比:concat()
      • 小数:round()
    • 排名变化 rank2020-rank_2021
  • 排序
    with t1 as(
      select 
          tag,
          date_format(start_time,"%Y") as start_year,
          count(score) as exam_cnt,
          rank() over(partition by date_format(start_time,"%Y") order by count(score) desc) as ranking -- 注意排名不需要分组partition by tag 
      from exam_record
      left join examination_info using(exam_id)
      where month(start_time) <7 and year(start_time) = 2020 or year(start_time) = 2021
      group by tag,start_year
    )
    select 
      tag,
      exam_cnt_20,
      exam_cnt_21,
      concat(round((exam_cnt_21-exam_cnt_20)/exam_cnt_20*100,1),"%") as growth_rate,
      exam_cnt_rank_20,
      exam_cnt_rank_21,
      exam_cnt_rank_21-exam_cnt_rank_20 as rank_delta
    from(
      select
          tag,
          sum(case when start_year = '2020' then exam_cnt end) as exam_cnt_20,
          sum(case when start_year = '2021' then exam_cnt end) as exam_cnt_21,
          sum(case when start_year = '2020' then ranking end) as exam_cnt_rank_20,
          sum(case when start_year = '2021' then ranking end) as exam_cnt_rank_21
      from t1
      group by tag
    ) t2
    where exam_cnt_21 !=0 and exam_cnt_20 !=0  
    order by growth_rate desc, exam_cnt_rank_21 desc
全部评论

相关推荐

01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
02-01 12:05
复旦大学 Java
腾讯的提前批大概率应该是没有笔试的,但是这个时候有相当部分的同学简历估计都没有准备好,没准备好的同学也不用急,大部分都是3月之后开,这个时候开的绝大多数都是神仙打架,问的东西也比较难,打算投递的同学也多看下计算机网络和操作系统,腾讯对这部分的知识问的比较多。另外多刷下牛客的热门题库,刷题注意刷ACM模式,和牛客的周赛题,腾讯有的部门会从这里面出原题。我是@程序员花海关注我,带你了解更多校招资讯!
程序员花海:还没有来得及准备的同学可以看下学习路线:https://www.nowcoder.com/discuss/824693499982315520?sourceSSR=users算法题:https://www.nowcoder.com/feed/main/detail/20e7a999fa04485b88340a274411ca0d?sourceSSR=users八股文:https://www.nowcoder.com/discuss/833102362771251200?sourceSSR=users简历书写方式:https://www.nowcoder.com/discuss/839907820706205696?sourceSSR=users都是以前在牛客发的文章~
软开人,秋招你打算投哪些...
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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