select
city,driver_id,avg_grade,avg_order_num,avg_mileage
from(
select
city,
driver_id,
round(avg(grade),1) avg_grade,
round(count(tb_get_car_order.driver_id)/count(distinct date(order_time)),1) avg_order_num,
round(sum(mileage)/count(distinct date(order_time)),3) avg_mileage,
rank()over(partition by city order by avg(grade)desc) rk
from tb_get_car_order
join tb_get_car_record
on tb_get_car_order.order_id = tb_get_car_record.order_id
group by driver_id, city
) as avg_driver
where rk = 1
order by avg_order_num