WITH t AS( SELECT YEAR(start_time) year, exam_id, tag, COUNT(submit_time) cnt, RANK() OVER(PARTITION BY YEAR(start_time) ORDER BY COUNT(submit_time) DESC) rk FROM exam_record INNER JOIN examination_info USING(exam_id) WHERE MONTH(submit_time) <= 6 GROUP BY year,exam_id ) SELECT t1.tag, t1.cnt exam_cnt_20, t2.cnt exam_cnt_21, CONCAT(ROUND((t2.cnt/t1.cnt-1)*100,1),'%') growth_rate, t1.rk exam_cnt_rank_20, t2.rk exam_cnt_rank_21, CAST(t2.rk AS SIGNED)-CAST(t1.rk AS SIGNED) FROM t t1 INNER JOIN t t2 ON t1.year=2020 AND t2.year=2021 AND t1.exam_id = t2.exam_id ORDER BY growth_rate DESC, t2.rk DESC