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

考试分数(五)

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

select
a.id
,a.job
,a.score
,a.t_rank
from ( # 这个子表目的是:按照job分区,对score进行降序,找到不同工作内部的分数排序
        select
        id
        ,job
        ,score
        ,dense_rank() over(partition by job order by score desc) t_rank
        from grade
     ) a
join ( # 这个子表目的是:找到每个工作中位数的始末位置,然后匹配上一子表的排序后的位置
        select
        job
        ,case when medium = round(medium, 0) then round(medium,0) else round(medium+0.5,0) end as start # medium = round(medium,0)判断是否medium是小数,进而可以确定count(*)是奇数还是偶数,然后start和end分情况讨论
        ,case when medium = round(medium, 0) then round(medium+1,0) else round(medium+0.5,0) end as end
        from (
                select
                job
                ,count(*)/2 medium
                from grade
                group by 1
             ) e
     ) b
on a.job = b.job
where a.t_rank in (b.start, b.end) # 判断排序的位置是否是中位数的始末位置
order by id; # 按id升序排列
全部评论

相关推荐

2025-12-15 12:50
河北工程大学
sta666:我也是这个国际商业化的,三天,一天一面,就通过了,不过我是后端实习生,好好面感觉能过。
点赞 评论 收藏
分享
脑袋锈住了:你这算啥,哥们中科院中强所硕士,本科211,叫我去干分拣,时薪20
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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