select id, a.job, score, t_rank from (select id, job, score, row_number() over(partition by job order by score desc) as t_rank from grade ) a left join ( select job, floor(if(count(*)%2=0, count(*)/2, (count(*)+1)/2)) as start, floor(if(count(*)%2=0, count(*)/2+1, (count(*)+1)/2)) as end from grade ...