select area, e_id, e_name, ranking from ( select area, e_id, e_name, row_number() over(partition by area order by b_num desc) as ranking from ( select e.area, e.e_id, e.e_name, count(distinct b_id) as b_num from employee_info e join bill_info b on e.e_id = b.e_id and month(b.date) = 8 group by e.area, e.e_id, e.e_name ) a ) b where ranking between 10 and 20 ;