select grade
from (
select *,(
select sum(number)
from class_grade
where grade<=c.grade
) t_rank
from class_grade c
inner join (
select sum(number) total
from class_grade
) c2
on 1=1
) t
where (t_rank-number+1<=if(total&1,floor(total/2)+1,floor(total/2)) and t_rank>=if(total&1,floor(total/2)+1,floor(total/2)))
or (t_rank-number+1<=floor(total/2)+1 and t_rank>=floor(total/2)+1)
order by grade;