# 明确问题:中位数怎么求
# 思路来源大佬,仅是用于笔记,原版请看SunburstRun
# 首先要明确中位数的概念,就是取最中间的值,如果是奇数是1个中位数,
# 如果是偶数则是两个中位数,
# 又因为上题已经知道正序求和了,那么逆序求和只需加desc
# 然后再用总个数与正序、逆序对比,两个都大于总数/2的就是中位数区间

  • 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 order by grade)  s
  •  where    a>=(total/2)   and b>=(total/2)  
  •  GROUP BY grade
  • order by  grade