with median_rows as(select job, floor((count(*)+1)/2) as start_row, floor((count(*)+2)/2) as end_row from grade group by job) select t1.* from (select id, job, score, dense_rank() over(partition by job order by score desc) as t_rank from grade order by id) t1 left join median_rows on t1.job=median_rows.job where t1.t_rank=median_rows.start_row or t1.t_rank=median_rows.end_row order by t1.id