select b.id, c.job, b.score, b.t_rank from ( select a.job, ceil(count_ / 2) start, ceil((count_+1) / 2) end from ( select job, count(*) count_ from grade group by job ) a ) c inner join ( select id, score, job, row_number() over ( partition by job order by score desc ) t_rank from grade ) b on c.job = b.job where b.t_rank = c.start or b.t_rank = c.end order by b.id,b.score
- 利用ceil找出中位数
- 利用窗口函数得到排名
- 连接两个表,筛选中位数位置上的信息