with
t1 as(
    select
        r.city,
        o.driver_id,
        o.order_id,
        date_format(o.order_time,'%Y-%m-%d') as order_dt,
        o.mileage,
        o.grade
    from tb_get_car_order o 
    left join tb_get_car_record r using(order_id)),
t2 as(
    select
        city,driver_id,
        avg(grade) avg_grade,
        count(distinct order_id)/count(distinct order_dt) avg_order_num,
        sum(mileage)/count(distinct order_dt) avg_mileage
    from t1
    group by city,driver_id),
t3 as(
    select
        *,
        dense_rank() over(partition by city order by avg_grade desc) as avg_grade_rank
    from t2)

select
    city,
    driver_id,
    round(avg_grade,1),
    round(avg_order_num,1),
    round(avg_mileage,3)
from t3
where avg_grade_rank=1
order by avg_order_num