第一步计算每个岗位的中位数位置,用floor函数,即
SELECT   
            job,  
            FLOOR((COUNT(job) + 1) / 2) AS start,  
            FLOOR((COUNT(job) + 2) / 2) AS end 
        FROM   
            grade  
        GROUP BY   
            job 
第二步,运用窗口函数按照分数降序给岗位排序,即
 RANK() OVER (PARTITION BY g.job ORDER BY g.score desc) AS t_rank,
 第三步,将以上两步的结果用INNER JOIN链接形成一个新表,再select出需要显示的字段,并用WHERE sr.t_rank = sr.start OR sr.t_rank = sr.end进行筛选,最后对于结果进行id排序,即
 SELECT sr.id, sr.job, sr.score, sr.t_rank  
FROM (  
    SELECT   
        g.id,        
        g.job,  
        g.score,  
        RANK() OVER (PARTITION BY g.job ORDER BY g.score desc) AS t_rank,  
        r.start,  
        r.end  
    FROM   
        grade g  
    INNER JOIN (  
        SELECT   
            job,  
            FLOOR((COUNT(job) + 1) / 2) AS start,  
            FLOOR((COUNT(job) + 2) / 2) AS end  
        FROM   
            grade  
        GROUP BY   
            job  
    ) AS r ON g.job = r.job  
) AS sr  
WHERE sr.t_rank = sr.start OR sr.t_rank = sr.end
order by sr.id