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

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

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

需要注意的几个点:

  • 排名变化:rank()返回无符号类型,不能直接减,用cast转换一下。cast(strng as type),type:char(字符型)、DATE(日期型)、DATETIME(日期和时间型)、DECIMAL(float型 SIGNED(int整数型)、TIME(时间型)
  • 排序:对tag类别中的时间排序,不要下意识用partition
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,start_year_20,exam_cnt_20,exam_cnt_rank_20,start_year_21,exam_cnt_21,exam_cnt_rank_21
			from (
					select tag,'2020' as start_year_20,count(submit_time) as exam_cnt_20,
								 rank() over(order by count(submit_time) desc) as exam_cnt_rank_20
					from exam_record
					left join examination_info using(exam_id)
					where year(start_time)=2020 and date_format(start_time,'%Y%m%d') between '20200101' and '20200630' and submit_time is not null
					group by tag
					 ) as t20
			inner join (
					select tag,'2021' as start_year_21,count(submit_time) as exam_cnt_21,
									rank() over(order by count(submit_time) desc) as exam_cnt_rank_21
					from exam_record
					left join examination_info using(exam_id)
					where year(start_time)=2021 and date_format(start_time,'%Y%m%d') between '20210101' and '20210630' and submit_time is not null
					group by tag
								) as t21 using(tag)
		 ) as t
order by growth_rate desc,exam_cnt_rank_21 desc
全部评论
你这里为什么不能在RANK中对tag进行分组排序呢
点赞 回复 分享
发布于 2022-03-05 11:03
还有一个点是:注意按题目的意思只筛选出完成作答的记录,所以不能简单记为0参与排名
点赞 回复 分享
发布于 2022-02-27 20:53

相关推荐

05-11 11:48
河南大学 Java
程序员牛肉:我是26届的双非。目前有两段实习经历,大三上去的美团,现在来字节了,做的是国际电商的营销业务。希望我的经历对你有用。 1.好好做你的CSDN,最好是直接转微信公众号。因为这本质上是一个很好的展示自己技术热情的证据。我当时也是烂大街项目(网盘+鱼皮的一个项目)+零实习去面试美团,但是当时我的CSDN阅读量超百万,微信公众号阅读量40万。面试的时候面试官就告诉我说觉得我对技术挺有激情的。可以看看我主页的美团面试面经。 因此花点时间好好做这个知识分享,最好是单拉出来搞一个板块。各大公司都极其看中知识落地的能力。 可以看看我的简历对于博客的描述。这个帖子里面有:https://www.nowcoder.com/discuss/745348200596324352?sourceSSR=users 2.实习经历有一些东西删除了,目前看来你的产出其实很少。有些内容其实很扯淡,最好不要保留。有一些点你可能觉得很牛逼,但是面试官眼里是减分的。 你还能负责数据库表的设计?这个公司得垃圾成啥样子,才能让一个实习生介入数据库表的设计,不要写这种东西。 一个公司的财务审批系统应该是很稳定的吧?为什么你去了才有RBAC权限设计?那这个公司之前是怎么处理权限分离的?这些东西看着都有点扯淡了。 还有就是使用Redis实现轻量级的消息队列?那为什么这一块不使用专业的MQ呢?为什么要使用redis,这些一定要清楚, 就目前看来,其实你的这个实习技术还不错。不要太焦虑。就是有一些内容有点虚了。可以考虑从PR中再投一点产出
点赞 评论 收藏
分享
06-23 18:25
沈阳大学 Java
HR已读不回,是我说话方式不对吗?
大白之主:你是串子吗? hr: 我们不招人了,把岗位挂着boss只是因为我闲得慌
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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