看了高赞的妙解,不想写思路了,自己的思路简直弱爆了。 select id, job , score, r from( select *, ceiling(max_r/2) as start_r, case when max_r%2=0 then ceiling(max_r/2)+1 else ceiling(max_r/2) end as end_r from( select *, max(r)over(partition by job) as max_r from( select *, row_number()over(partition by job order by score desc) as r from grade) as tb1 ) as tb2 ) as tb3 where r=start_r or r=end_r order by id