with t As ( select *,row_number() over(partition by job order by score desc) r_rank from grade) 
select t.id,t.job,t.score,t.r_rank
from t left join (select job, (case when mod(max(r_rank),2)=0 then max(r_rank)/2
                              else floor(max(r_rank)/2)+1 end) start,
                             (case when mod(max(r_rank),2)=0 then max(r_rank)/2+1
                              else floor(max(r_rank)/2)+1 end) end   
            from t
            group by job)t1
on t.job=t1.job and (t.r_rank=t1.start or t.r_rank=t1.end) 
where t1.job is not null 
group by t.id,t.job,t.score,t.r_rank
order by t.id

参考考试分数(四)思路,生成t1表
t与t1连接注意3个条件,且or的括号一定要加,如果没有括号虽然本机和测试都通过,但是提交时的结果显示错误。

on t.job=t1.job and (t.r_rank=t1.start or t.r_rank=t1.end)