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找出中位数
- 利用窗口函数得到排名
- 连接两个表,筛选中位数位置上的信息

京公网安备 11010502036488号