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

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

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

WITH t1 AS(
    SELECT tag, start_year, exam_cnt_20, rank() over (ORDER BY exam_cnt_20 DESC) exam_cnt_rank_20 
    FROM (SELECT tag, YEAR(submit_time) start_year, COUNT(submit_time) exam_cnt_20
          FROM exam_record, examination_info
          WHERE exam_record.exam_id=examination_info.exam_id
          AND YEAR(submit_time)=2020 AND MONTH(submit_time)<7
          GROUP BY tag,start_year) tt1),
    t2 AS(
    SELECT tag, start_year, exam_cnt_21, rank() over (ORDER BY exam_cnt_21 DESC) exam_cnt_rank_21
    FROM (SELECT tag, YEAR(submit_time) start_year, COUNT(submit_time) exam_cnt_21
          FROM exam_record, examination_info
          WHERE exam_record.exam_id=examination_info.exam_id
          AND YEAR(submit_time)=2021 AND MONTH(submit_time)<7
          GROUP BY tag,start_year) tt2)
     

SELECT t1.tag, exam_cnt_20, exam_cnt_21, 
CONCAT(ROUND((exam_cnt_21-exam_cnt_20)/exam_cnt_20*100,1), '%') growth_rate,
exam_cnt_rank_20, exam_cnt_rank_21, CAST(exam_cnt_rank_21 AS SIGNED)-CAST(exam_cnt_rank_20 AS SIGNED)
FROM t1,t2
WHERE t1.tag=t2.tag
ORDER BY growth_rate DESC, exam_cnt_rank_21 DESC;

思路是先做出20年的信息表,21年的信息表,之后两表一计算即可。

mark的是CAST(xxx AS SIGNED)的用法。CAST函数语法规则是:Cast(字段名 as 转换的类型), SIGNED表示转化为int型。

上面代码直接exam_cnt_rank_21和exam_cnt_rank_20相减会报错。mysql 两个字段相减,当其中一个或两个字段的类型的unsigned无签名类型,相减的值小于0时,会报错。

全部评论

相关推荐

不愿透露姓名的神秘牛友
11-26 15:46
已编辑
字节国际 电商后端 24k-35k
点赞 评论 收藏
分享
10-09 00:50
已编辑
长江大学 算法工程师
不期而遇的夏天:1.同学你面试评价不错,概率很大,请耐心等待;2.你的排名比较靠前,不要担心,耐心等待;3.问题不大,正在审批,不要着急签其他公司,等等我们!4.预计9月中下旬,安心过节;5.下周会有结果,请耐心等待下;6.可能国庆节前后,一有结果我马上通知你;7.预计10月中旬,再坚持一下;8.正在走流程,就这两天了;9.同学,结果我也不知道,你如果查到了也告诉我一声;10.同学你出线不明朗,建议签其他公司保底!11.同学你找了哪些公司,我也在找工作。
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务