with p as ( select id,job,score,row_number() over(partition by job order by score desc) as t_rank, count(*) over (partition by job) as total from grade ) select id,job,score,t_rank from p where t_rank between total/2 and total/2+1 order by id
注意这里的select 了t_rank 而不是avg(t_rank)