首先我们需要知道:当某一数的正序和逆序累计均大于整个序列的数字个数的一半即为中位数
比如:
A A B B C C D D 
1 2 3  4  5 6  7 8
8 7 6  5  4  3 2 1
那么上面的4,5以及5,4就是中位数,如果是奇数的话,就只有1个
再比如
A2个,B3个,C5个,D2个,
正序2,5,10,12
倒序12,10,7,2
正序和12,大于等于6的,为C,D,
逆序和为12,大于等于6的为ABC,所以最后中位数为C


根据(一)https://blog.nowcoder.net/n/60f8ed8d360c4307a8875349caf22b77 我们知道求正序和的写法,
求逆序和其实就是 sum(a) over (order by b desc) 就行了,多加了一个desc,那么我们可以写出如下代码:

 select grade,(select sum(number) from class_grade) as total,              
    sum(number) over(order by grade) a,              
    sum(number) over(order by grade desc) b           
 from class_grade order by grade;
得到中间表的结果如下:

将 a>=total的一半并且 b>=total的一半列出,就得到了最后需要的结果:
select grade from (select grade,(select sum(number) from class_grade) as total,
        sum(number) over(order by grade) a,
        sum(number) over(order by grade desc) b
        from class_grade) t1
where a >= total/2 and b >=total/2
order by grade;