with tmp1 as( select city, driver_id, rank() over(partition by city order by avg_grade desc) rk, avg_grade from( select distinct city, driver_id, round(avg(grade) over(partition by driver_id,city),1) avg_grade from tb_get_car_order t1 left join tb_get_car_record t2 on t1.order_id=t2.order_id ) a ), tmp2 as( select driver_id, round(count(t1.order_id)/count(distinct date(order_time)),1) avg_order_num, round(sum(if(mileage is null,0,mileage))/count(distinct date(order_time)),3) avg_mileage from tb_get_car_order t1 left join tb_get_car_record t2 on t1.order_id=t2.order_id group by driver_id ) select city, driver_id, avg_grade, avg_order_num, avg_mileage from tmp1 left join tmp2 using(driver_id) where rk=1 order by avg_order_num