SELECT  tag, 
        exam_cnt_20, 
        exam_cnt_21,  
        CONCAT(ROUND((exam_cnt_21 - exam_cnt_20) / exam_cnt_20 * 100, 1), '%') growth_rate,
        rank_20,
        rank_21,
        CAST(rank_21 as SIGNED) - CAST(rank_20 AS SIGNED) rank_delta
FROM(
    SELECT tag,   -- 第二个子查询把排名补充上后再套一层就可以输出结果了,简简单单
           exam_cnt_20, 
           exam_cnt_21, 
           RANK()OVER(ORDER BY exam_cnt_20 DESC) rank_20, 
           RANK()OVER(ORDER BY exam_cnt_21 DESC) rank_21
    FROM(    -- 第一个子查询先把格式整理好和数据筛选好,以及把题目所需的完成次数算出来,tag做分类
        SELECT tag,                                             
               SUM(IF(YEAR(submit_time) = 2020, 1, 0)) exam_cnt_20,         
               SUM(IF(YEAR(submit_time) = 2021, 1, 0)) exam_cnt_21
        FROM exam_record LEFT JOIN examination_info USING(exam_id)
        WHERE MONTH(start_time) <= 6
        GROUP BY tag
    )a
)b
WHERE exam_cnt_20 != 0 AND exam_cnt_21 != 0
ORDER BY growth_rate DESC, rank_21 DESC