# 思路:
# 1、计算2021上半年各类试卷的做完次数和排名(用where过滤,用rank排名)
# 2、计算2020年上半年各类试卷的做完次数和排名
# 3、用inner join 将两年连接起来,计算做完次数和排名变化
select t2.tag,t3.exam_cnt_20,t2.exam_cnt_21
,concat(round((t2.exam_cnt_21/t3.exam_cnt_20-1)*100,1),'%') as growth_rate
,t3.exam_cnt_rank_20,t2.exam_cnt_rank_21
,cast(t2.exam_cnt_rank_21 as signed)-cast(t3.exam_cnt_rank_20 as signed) as rank_delta from 
(select t1.tag,t1.exam_cnt_21
,rank() over(order by t1.exam_cnt_21 desc) as exam_cnt_rank_21 
from (
select e1.tag
,count(e2.submit_time) as exam_cnt_21 
from exam_record as e2 left join examination_info as e1 
on e2.exam_id=e1.exam_id 
where e2.start_time between '2021-01-01' and '2021-06-30' 
group by e1.tag 
) t1 ) t2
 inner join (
select t1.tag,t1.exam_cnt_20
,rank() over(order by t1.exam_cnt_20 desc) as exam_cnt_rank_20 
from (
select e1.tag
,count(e2.submit_time) as exam_cnt_20 
from exam_record as e2 left join examination_info as e1 
on e2.exam_id=e1.exam_id 
where e2.start_time between '2020-01-01' and '2020-06-30' 
group by e1.tag 
) t1  ) t3 
on t2.tag=t3.tag
order by growth_rate desc,exam_cnt_rank_21 desc