select id,job,score,t_rank2 from ( select * ,rank() over(partition by job order by score) t_rank1 ,rank() over(partition by job order by score desc) t_rank2 ,count(id) over(partition by job) s from grade ) t where t_rank1>=t.s/2 and t_rank2>=t.s/2 order by id
思路:可参考第88题,都是利用正序逆序都大于等于总数的一半得到中位数。