select
a.city,
a.driver_id,
round(a.avg_grade, 1) as avg_grade,
round(count(order_time) / count(distinct date(order_time)), 1) as avg_order_num,
round(sum(mileage) / count(distinct date(order_time)), 3) as avg_mileage
from (
select city, driver_id, avg(grade) as 'avg_grade',
dense_rank() over(partition by city order by avg(grade) desc) as drk
from tb_get_car_record as t1
join tb_get_car_order as t2
using(order_id)
group by city, driver_id
) a
join tb_get_car_order as t3 on t3.driver_id = a.driver_id
where drk = 1
group by city, driver_id
order by avg_order_num