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