SELECT f.id,f.job,f.score,f.t_rank FROM (SELECT id,job,score,ROW_NUMBER()OVER(PARTITION BY job ORDER BY score DESC) AS t_rank FROM grade ) AS f JOIN (SELECT job,CASE WHEN COUNT(id)%2=0 THEN CEILING(COUNT(id)*1/2) ELSE CEILING(COUNT(id)*1/2) END AS st, ...