题解 | #试卷完成数同比2020年的增长率及排名变化#
试卷完成数同比2020年的增长率及排名变化
https://www.nowcoder.com/practice/13415dff75784a57bedb6d195262be7b
Select tag,
exam_cnt_20, exam_cnt_21,
concat(round((exam_cnt_21 - exam_cnt_20)/exam_cnt_20 * 100,1),'%' ) as growth_rate,
exam_cnt_rank_20, exam_cnt_rank_21,
CAST(exam_cnt_rank_21 as SIGNED) - CAST(exam_cnt_rank_20 AS SIGNED) as rank_delta
from
(Select tag,
sum(case when start_year = '2020' then exam_cnt end ) as exam_cnt_20,
sum(case when start_year = '2021' then exam_cnt end ) as exam_cnt_21,
sum(case when start_year = '2020' then exam_cnt_rank end ) as exam_cnt_rank_20,
sum(case when start_year = '2021' then exam_cnt_rank end ) as exam_cnt_rank_21
from
(Select tag, date_format(start_time_origin, '%Y' ) as start_year, count(score) as exam_cnt, rank() over(partition by date_format(start_time_origin, '%Y') order by count(score) desc ) as exam_cnt_rank
from (
Select tag, start_time as start_time_origin, date_format(start_time, '%Y%m' ) as start_month, score
from exam_record er left join examination_info ei on er.exam_id = ei.exam_id
where score is not null and ((date_format(start_time, '%Y%m' ) between '202001' and '202006') or (date_format(start_time, '%Y%m' ) between '202101' and '202106'))) t1
group by tag, date_format(start_time_origin, '%Y') ) t2
group by tag) t3
where exam_cnt_20 is not null and exam_cnt_21 is not null
order by growth_rate desc, exam_cnt_rank_21 desc

