小笨蛋看过来| #最差是第几名(二)#

最差是第几名(二)

https://www.nowcoder.com/practice/165d88474d434597bcd2af8bf72b24f1

select
    grade,
    number,
    sum(number) over(order by grade asc) max_rank
from
    class_grade
order by 
    grade asc

select 
    a.grade,
    a.number,
    a.max_rank-a.number+1 min_rank,
    max_rank
from
    (select grade, number, sum(number) over(order by grade) max_rank from class_grade) a

select
    (case when sum(number) % 2 = 0 then round(sum(number)/2 ,0) else round((sum(number)+1)/2 ,0) end) as mid_number
from class_grade 
union  # 注意用union 而不是 union all 这样会帮忙去重,即当sum(number)是奇数时,可以只输出一个
select
    (case when sum(number) % 2 = 0 then round((sum(number)+2)/2 ,0) else round((sum(number)+1)/2 ,0) end) as mid_number
from class_grade 

select 
    distinct b.grade
from
(
    select 
        a.grade,
        a.number,
        a.max_rank-a.number+1 min_rank,
        max_rank
    from
        (select grade, number, sum(number) over(order by grade) max_rank from class_grade) a
) b
join 
(
    select
        (case when sum(number) % 2 = 0 then round(sum(number)/2 ,0) else round((sum(number)+1)/2 ,0) end) as mid_grade
    from class_grade 
    union  # 注意用union 而不是 union all 这样会帮忙去重,即当sum(number)是奇数时,可以只输出一个
    select
        (case when sum(number) % 2 = 0 then round((sum(number)+2)/2 ,0) else round((sum(number)+1)/2 ,0) end) as mid_grade
    from class_grade 
) c
on c.mid_grade between b.min_rank and b.max_rank
order by grade asc

全部评论

相关推荐

ohs的小木屋:比不少实习待遇高了
点赞 评论 收藏
分享
05-26 10:24
门头沟学院 Java
qq乃乃好喝到咩噗茶:其实是对的,线上面试容易被人当野怪刷了
找工作时遇到的神仙HR
点赞 评论 收藏
分享
强大的马里奥:不太可能,我校计算机硕士就业率99%
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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