解法一
1、新增一列排名 row_number()
select *,row_number() over (partition by job order by score desc) as t_rnk from grade2、借用上一题计算的结果 中位数的位置
select job ,ceil((count(score))/2) as start, ceil((count(score)+1)/2) as end from grade group by job order by job3、将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;