题解 | #试卷完成数同比2020年的增长率及排名变化#

试卷完成数同比2020年的增长率及排名变化

https://www.nowcoder.com/practice/13415dff75784a57bedb6d195262be7b

# V1
# # 2021年上半年各类试卷的做完次数  以及 同比
# # 以及做完次数排名变化,按照增长率📈  和  21年排名降序输出
# # 字段要求:tag\20年做完次数\21年做完次数\同比\20排名\21排名\排名增长数

# # 表一:链接
# with table1 as (
#     select tag,uid,exam_id,submit_time
#     from exam_record left join examination_info using(exam_id)
#     where submit_time is not null 
#     And year(submit_time) between 2020 and 2021
#     AND month(submit_time) between 1 and 6
# ),
# # 表二:按照tag、year进行分类计算
# # 注意点:groupby按照tag、year分组,partition 按照year分组
# # 注意点:排名允许并列且跳过,用rank
# table2 as(
#     select tag,
#     year(submit_time) as start_year,
#     COUNT(submit_time) as exam_cnt,
#     rank()over(partition by year(submit_time) order by count(submit_time) desc) as exam_cnt_rank
#     from table1
#     group by tag,year(submit_time)
# ),
# # 表三: 感觉要用lead函数?
# table3 as(
#     select tag,
#     (case when start_year=2020 then exam_cnt else 0 end) as exam_cnt_20,
#     lead(exam_cnt,1)over(partition by tag order by start_year) as exam_cnt_21,
#     concat(round((lead(exam_cnt,1)over(partition by tag order by start_year)-(case when start_year=2020 then exam_cnt else 0 end))/(case when start_year=2020 then exam_cnt else 0 end)*100,1),"%") as growth_rate,	


#     (case when start_year=2020 then exam_cnt_rank else 0 end) as exam_cnt_rank_20,
#     lead(exam_cnt_rank,1)over(partition by tag order by start_year) as exam_cnt_rank_21,
#     (lead(exam_cnt_rank,1)over(partition by tag order by start_year)-(case when start_year=2020 then exam_cnt_rank else 0 end)) as rank_delta
#     from table2
# )

# select *
# from table3
# where growth_rate is not null
# order by exam_cnt_20 asc


# V2 
# 时间:2021上半年vs2020上半年
# 字段:tag、20做完次数、21做完次数、同比、20做完次数排名、21做完次数排名、排名变化

# tb1:过程表,筛选时间,并且生成时间字段
with tb1 as(
    select tag,start_time,submit_time,score,year(submit_time) as year
    from exam_record left join examination_info using(exam_id)
    where score is not null 
    # AND month(submit_time) <= 6 AND year(submit_time) = 2020 or year(submit_time) = 2021 AND month(submit_time) >=1
    # 注意点: 时间筛选的时候的逻辑表达式需要商榷 用bewteen and 会好点
    AND month(submit_time) between 1 and 6
    AND year(submit_time) between 2020 and 2021
),
# tb2:维度:tag、year. 指标:计数score,排序rank
tb2 as(
select tag,year,count(score) as cnt,
# 按照year分组、cnt排序,使用的是rank(跳过)
rank() over(partition by year order by count(score) desc) as rk
from tb1
group by tag,year
),

# tb3: 拆分字段20/21,过程表
tb3 as(
    select tag,
    case when year = 2020 then cnt else 0 end as exam_cnt_20,
    # 运用lead函数 将下一期的数据搬到一列新字段
    lead(cnt,1)over(partition by tag order by year) as exam_cnt_21,
    # case when year = 2021 then cnt else 0 end as exam_cnt_21,
    case when year = 2020 then rk else 0 end as exam_cnt_rank_20,
    # 运用lead函数
    lead(rk,1)over(partition by tag order by year) as exam_cnt_rank_21
    from tb2
)
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,
exam_cnt_rank_21 - exam_cnt_rank_20 as rank_delta
from tb3
where exam_cnt_20 != 0 
AND exam_cnt_21 !=0 
order by growth_rate desc,exam_cnt_rank_21 desc

# select tag,start_time,submit_time,score,year(submit_time) as year
#     from exam_record left join examination_info using(exam_id)
#     where score is not null 
#     # AND month(submit_time) <= 6 AND year(submit_time) = 2020 or year(submit_time) = 2021 AND month(submit_time) >=1
#     AND month(submit_time) between 1 and 6
#     AND year(submit_time) between 2020 and 2021

全部评论

相关推荐

家人们,我现在真的好纠结。我是26届的,目前还没有实习过。我现在的情况是,想参加秋招,但是感觉自己的简历特别空,没有实习经历会不会秋招直接凉凉啊?可我又听说现在很多公司对26届实习生也不太感冒,说什么不确定性大。而且我最近在准备考公,时间上也有点冲突。要是把时间花在实习上,备考时间就少了。但要是不实习,又怕以后就业有问题😫有没有懂行的友友帮我分析分析:26届现在不实习,秋招找工作真的会很难吗?考公和实习该怎么平衡啊?如果现在不实习,考完公再去找实习还来得及吗?真的太焦虑了,希望大家能给我点建议🙏
小破站_程序员YT:我可能和大家的观点不一样。人的精力是有限的,不能既要还要。你又想实习又想考公最后又要秋招上岸,我觉得哪有那么多的选择。你如果想考上岸,那就全力以赴。如果想秋招上岸,就继续投实习,投没了,就继续准备秋招,秋招不行继续春招。别到最后,考公没上岸,觉得是花了时间浪费在找实习上了, 秋招没上岸,觉得是浪费时间准备考公去了。我是认为很难说可以去平衡 不喜勿喷,可以叫我删除
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务