题解 | 最差是第几名(二)
最差是第几名(二)
https://www.nowcoder.com/practice/165d88474d434597bcd2af8bf72b24f1
with a as (
select 'A' as grade, 0 as number
union all
select 'B' as grade, 0 as number
union all
select 'C' as grade, 0 as number
union all
select 'D' as grade, 0 as number
union all
select 'E' as grade, 0 as number
union all
select * from class_grade
),
b as (
select grade, sum(number) as number
from a
group by grade
),
c as (
select grade, sum(number) over(order by grade rows between unbounded preceding and current row) as worst, case when grade = 'A' then 1 else sum(number) over(order by grade rows between unbounded preceding and 1 preceding) + 1 end as best, sum(number) over() as total
from b
where grade in (select grade from class_grade)
)
select grade
from c
where total % 2 = 1 and (total+1)/2 between best and worst
union
select grade
from c
where total % 2 = 0 and ((total/2 between best and worst) or (total/2+1 between best and worst))
order by grade
不知道自己在写啥了

顺丰集团工作强度 369人发布