-- 查询各个岗位分数的中位数位置上的所有grade信息
-- 先找到中位数:rank、count
-- 判断为中位数的条件,根据条件得到信息
-- 输出id job score t_rank,并且按id升序排序
with rank_s as(
    select
      id,
      job,
      score,
      dense_rank() over (partition by job order by score desc) as t_rank,
      count(score) over (partition by job) as num
    from
      grade
),
medium as (
   SELECT distinct
      id,
      job,
      score,
      t_rank,
      CASE 
        WHEN MOD(num, 2) != 0 THEN round(CEIL(num / 2.0),0)
        ELSE round(num / 2,0)
      END AS start,
      CASE 
        WHEN MOD(num, 2) != 0 THEN round(CEIL(num / 2.0),0)
        ELSE round((num / 2) + 1,0)
      END AS end
  FROM
    rank_s
)

select
  id,
  job,
  score,
  t_rank
from
  medium
where t_rank = start or t_rank = end
order by id;