题解 | #考试分数(五)#

考试分数(五)

https://www.nowcoder.com/practice/b626ff9e2ad04789954c2132c74c0512?tpId=82&tqId=35496&rp=1&ru=/exam/oj&qru=/exam/oj&sourceUrl=%2Fexam%2Foj%3Fpage%3D2%26tab%3DSQL%25E7%25AF%2587%26topicId%3D82&difficulty=undefined&judgeStatus=undefined&tags=&title=

if函数的输出参数可以是表达式

select id,t1.job,score,t_rank from
(select id,job,score,dense_rank()over(partition by job order by score desc)t_rank
from grade)t1 
join 
(select job,count(id) m from grade group by job)t2
on t1.job=t2.job and if(t2.m%2=1,t_rank=(t2.m+1)/2,t_rank in (t2.m/2,t2.m/2+1))
order by id

也可以用count窗口函数,不用group by+join

其他方法,无论奇偶,中位数的位置距离(个数+1)/2 小于1:

select id,job,score,s_rank
from 
(select *
        ,(row_number()over(partition by job order by score desc))as s_rank
	    ,(count(score)over(partition by job))as num
        from grade)t1
where abs(t1.s_rank-(t1.num+1)/2)<1
order by id;
SQL题解 文章被收录于专栏

主要是为自己做个笔记

全部评论

相关推荐

03-10 10:57
已编辑
门头沟学院 推荐算法
夜夜还好:我们学校说为了学生就业,更新了课程,我今天大二,上学期在学jsp,html,这学期上来工程实践,要求用springboot+vue,说什么这些技术要我们提前自己准备,要不你把学费还我吧,我给b站充个会员,人家教的比你多
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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