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

考试分数(五)

http://www.nowcoder.com/practice/b626ff9e2ad04789954c2132c74c0512

题目:

查询各个岗位分数的中位数位置上的所有grade信息,并且按id升序排序

思路:

1、各个岗位:按job分组,各岗位都有自己的排序——窗口函数 row_number()

2、中位数:参照上题,round(cnt/2) or rk=round((1+cnt)/2)

代码:

select id,job,score,rk
from 
    (select id,job,score,
     row_number() over(partition by job order by score desc) as rk,
     count(score) over(partition by job) cnt
    from grade
    )a
#where rk in if(cnt%2=0,cnt/2 or cnt/2+1,(cnt+1)/2)
where rk=round(cnt/2) or rk=round((1+cnt)/2)
order by id

反思:

1、一开始没想到用count,就想着看每个job个数用max(rk),但这样外层循环需要group by,然后就得vid,job,score,rk全放进去,做不出来;

2、判断中位数那里,还想着分cnt奇偶情况,做不出来,还是按照上一道题直接用round了。

全部评论

相关推荐

06-04 16:50
腾讯_TEG_技术
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

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