select a.tag as tag,b.exam_cnt as exam_cnt_20,a.exam_cnt as exam_cnt_21,
concat(round((a.exam_cnt-b.exam_cnt)/b.exam_cnt*100,1),'%') as growth_rate,
b.rk as exam_cnt_rank_20,
a.rk as exam_cnt_rank_21,cast(a.rk as signed)-cast(b.rk as signed)as rank_delta

from(SELECT tag,DATE_FORMAT(start_time,"%Y")as start_year,count(score)as exam_cnt,
RANK() over(partition by DATE_FORMAT(start_time,"%Y") order by count(score) desc)as rk
from examination_info right join exam_record using(exam_id)
     where month(start_time)<=6
group by tag,start_year
having exam_cnt !=0 
order by start_year)a inner join (SELECT tag,DATE_FORMAT(start_time,"%Y")as start_year,count(score)as exam_cnt,
RANK() over(partition by DATE_FORMAT(start_time,"%Y") order by count(score) desc)as rk
from examination_info right join exam_record using(exam_id)
     where month(start_time)<=6
group by tag,start_year
having exam_cnt !=0 
order by start_year)b on a.tag=b.tag and a.start_year=b.start_year+1
order by growth_rate desc,exam_cnt_rank_21 desc