自己的代码弱爆了,就不写思路了。牛逼的代码可以参考高赞回答。
select grade from(
select grade, if(c >bb and c<=b or d>bb and c<=b,1,0) as e
from(
select grade, lag(b,1)over(order by b) bb, b,
ceil(if(a%2=0,a/2,(a+1)/2)) c,
ceil(if(a%2=0,a/2+1,(a+1)/2)) d
from(
select *, 
sum(number)over() a,
sum(number)over(order by grade) b
from class_grade) as tb1
) as tb2
) as tb3
where e=1
order by grade