-- 查询中位数学生位于什么档次
-- 首先需要知道中位数是哪一个或两个数字
-- 再判断中位数位于哪个sum窗口函数得到的结果范围内
with medium as(
    select
     sum(number) as total
    from
      class_grade
),
medium_next as(
    select
      case
       when mod(total, 2) = 0 then total/2 
       else ceil(total/2) 
      end as start,
      case
       when mod(total, 2)=0 then (total/2)+1
       else null
      end as end
    from
      medium
),
total_roll as(
    select
     grade,
     sum(number) over (order by grade) as rolltotal
    from
     class_grade
),
 total_roll2 as(
    select
      grade,
      rolltotal,
      lag(rolltotal,1) over (order by grade) as rolltotal2
    from
     total_roll
)
select
 grade
from 
 total_roll2, medium_next
where 
 (start >rolltotal2 and start<=rolltotal)
 or (end >rolltotal2 and end<=rolltotal)

挺意外这道题写的这么顺的~