select id,job,score,s_rank
from
(select *
,(row_number()over(partition by job order by score desc))as s_rank
,(count(score)over(partition by job))as num
from grade)t1
where abs(t1.s_rank-(t1.num+1)*1.0/2)<1
order by id
#直接复制粘贴了评论区大佬的思路,这个就是根据位置排名与中位数之间的距离差值一定小于1为判断条件,筛选中位数。
#所以思考问题可以从多角度,未必非要很多表相连。想要通过表连接也可以,首先得到每个岗位中位数位置,然后根据岗位与中位数位置两列作为连接条件得到相关信息。