with t1 as (select id,job,score,row_number() over(partition by job order by score desc) as t_rank from grade), t2 as (SELECT job, floor(( count(*) + 1 )/ 2 ) AS "start", floor(( count(*) + 2 )/ 2 ) AS 'end' FROM grade GROUP BY job) select id,t1.job,score,t_rank from t1 join t2 on t1.job = ...