with
    t1 as (
        select
            tb_get_car_record.city,
            tb_get_car_order.driver_id,
            round(avg(grade), 1) as avg_grade,
            round(count(order_time), 1) as order_num,
            round(sum(mileage), 1) as mileage,
            rank() over (
                partition by
                    tb_get_car_record.city
                order by
                    avg(grade) desc
            ) as ranking
        from
            tb_get_car_order
            left join tb_get_car_record using (order_id)
        group by
            tb_get_car_record.city,
            tb_get_car_order.driver_id
    )
select
    t1.city,
    t1.driver_id,
    t1.avg_grade,
    round(t1.order_num / count(distinct date (tb_get_car_order.order_time)),1) as avg_order_num,
    t1.mileage / count(distinct date (tb_get_car_order.order_time))
from
    t1
    left join tb_get_car_order using (driver_id)
where
    ranking = 1
group by
    t1.city,
    t1.driver_id,
    t1.avg_grade
order by  t1.avg_grade asc;