select
    city, driver_id, avg_grade, avg_order_num, avg_mileage
from
    (select
        city, 
        driver_id,
        round(avg(grade),1) avg_grade,
        round(count(*)/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_record t1
    inner join
        tb_get_car_order t2
    using(order_id)
    group by
        city, driver_id) t
where rk=1
order by avg_order_num;