题解 | #第二快/慢用时之差大于试卷时长一半的试卷#

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

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

比较直接的思路, 先找出2020年上半年的完成数及排名, 然后找出2021年的完成数及排名, 最后链接两表进行计算即可

select aa.tag,
      t1.exam_cnt_20,
      t2.exam_cnt_21,
      concat(round((t2.exam_cnt_21 - t1.exam_cnt_20) / t1.exam_cnt_20 * 100, 1), '%') as growth_rate,
      rank1,
      rank2,
      # 注意一般数据库默认都是unsigned, 是不能出现负数的, 可用cast(字段 as signed)即可
      cast(rank2 as SIGNED) - cast(rank1 as SIGNED) as exam_cnt_rank
  from (
      select exam_id,
          count(submit_time) exam_cnt_20,
          # 备注: 这里是不能用partition的, 因为是根据分组之后的exam_id进行的
          rank() over(order by count(submit_time) desc) as rank1
      from exam_record
      where year(start_time)=2020
      and month(start_time) <= 6
      group by exam_id
      having exam_cnt_20 >= 1
  ) t1
  join (
      select exam_id,
          count(submit_time) exam_cnt_21,
          rank() over(order by count(submit_time) desc) as rank2
      from exam_record
      where year(start_time)=2021
      and month(start_time) <= 6
      group by exam_id
      having exam_cnt_21 >= 1
  ) t2 on t1.exam_id=t2.exam_id
  join examination_info aa on t1.exam_id=aa.exam_id
  order by growth_rate desc, t2.exam_cnt_21
全部评论
请问一下,为什么连接两个表后算同比的时候不需要做出说明,相同的tag就会自动匹配呀
1
送花
回复
分享
发布于 2022-04-06 13:46
请问为什么不能用count(score) over(partition by exam_id) as exam_cnt这种的呀 感谢
点赞
送花
回复
分享
发布于 2022-01-23 12:17
滴滴
校招火热招聘中
官网直投
请问为什么exam_cnt_rank用cast转换 但是growth_rate那里不用转换呀 那里不是也可能出现负数吗 万分感谢
点赞
送花
回复
分享
发布于 2022-01-23 12:49
rank1,rank2 为什么会有负数的情况呀??
点赞
送花
回复
分享
发布于 2022-01-24 21:16
求大佬解惑,感谢!
点赞
送花
回复
分享
发布于 2022-01-24 21:16
请教一下大佬,大框架想的一样,请问我这个出现了什么问题? select t2.tag, t1.exam_cnt_20, t2.exam_cnt_21, concat(round((t2.exam_cnt_21-t1.exam_cnt_20)/t1.exam_cnt_20*100,1) .'%') growth_rate, t1.exam_cnt_rank_20, t2.exam_cnt_rank_21, (t2.exam_cnt_rank_21-t1.exam_cnt_rank_20) rank_delta from ( select tag,count(submit_time) exam_cnt_20, rank()over(partition by tag order by count(submit_time) desc) exam_cnt_rank_20 from exam_record join examination_info using(exam_id) where year(submit_time)='2020' and month(submit_time)<=6 group by tag )t1 join ( select tag,count(submit_time) exam_cnt_21, rank()over(partition by tag order by count(submit_time) desc) exam_cnt_rank_21 from exam_record join examination_info using(exam_id) where year(submit_time)='2021' and month(submit_time)<=6 group by tag )t2 using(tag) order by growth_rate desc,t2.exam_cnt_21 注意:navicat运行是正确的
点赞
送花
回复
分享
发布于 2023-01-26 22:59 天津
这里的代码不太严谨,如果一个tag有多个试卷会有问题,最好在最后面按tag聚合一下。。。。。。
点赞
送花
回复
分享
发布于 05-11 16:28 甘肃

相关推荐

24 3 评论
分享
牛客网
牛客企业服务