大佬的解法,中位数的性质:无论从前往后还是从后往前,中位数的位置都处在总数除以二之外,举个例子,如果是长度为三,那么中位数的位置就是二(从 一 开始),所以,我们可以通过 sum()over(order by grade) 求出升序的排名,再通过 (order by grade desc) 求出降序的排名,找到位置处于中间的那个数据,就是要找的中位数。
select grade
from (select grade,
(select sum(number) from class_grade) as total,
sum(number)over(order by grade) as a, sum(number)over(order by grade desc) as b
from class_grade order by grade)as tab
where a >= total / 2 and b >= total / 2
order by grade