解法一
1、新增一列排名 row_number()
select *,row_number() over (partition by job order by score desc) as t_rnk
from grade
2、借用上一题计算的结果 中位数的位置
select job ,ceil((count(score))/2) as start,
ceil((count(score)+1)/2) as end
from grade 
group by job
order by job
3、将1表和2表join ,筛选 排名t_rnk等于 中位数位置的信息
select a.*
from
(select *,row_number() over (partition by job order by score desc) as t_rnk
from grade) as a
join 
(select job ,ceil((count(score))/2) as start,
ceil((count(score)+1)/2) as end
from grade 
group by job
order by job) as b
on a.job=b.job
where a.t_rnk=b.start&nbs***bsp;a.t_rnk=b.end
order by a.id;
解法二  中位数的位置-(count()+1)/2小于1
select a.id,a.job,a.score,a.t_rnk
from 
(select*,
row_number() over(partition by job order by score desc) as t_rnk,
count(score) over(partition by job) as cnt
from grade) as a 
where abs(a.t_rnk-(a.cnt+1)/2)<1
order by a.id;