select temp2.id, temp2.job, grade.score, rn as t_rank
from (
select id, job, score, rn, (cnt+1)/2 as middle,
case when rn=(cnt+1)/2 or rn=floor((cnt+1)/2) or rn=ceil((cnt+1)/2) then 1 else 0 end as flag
from
(
select id, job, score,
row_number() over (partition by job order by score desc) as rn,
count(1) over (partition by job) as cnt
from grade
) temp
) temp2 join grade on temp2.id=grade.id
where flag=1
order by temp2.id;

京公网安备 11010502036488号