with t as (
        select city , driver_id, avg_grade,avg_order_num, avg_mileage,rank()over(partition by city order by avg_grade desc) 'rk'

from 
(
select 
    city,
    driver_id, 
    round(avg(grade),1) 'avg_grade', 
    round(count(*) / count(distinct date_format(order_time, '%Y-%m-%d')), 1) 'avg_order_num', 
    round(sum(mileage) / count(distinct date_format(order_time, '%Y-%m-%d')), 3) 'avg_mileage'

from tb_get_car_order co
join tb_get_car_record r on r.order_id = co.order_id
group by city, driver_id
) a

)

select  city , driver_id, avg_grade,avg_order_num, avg_mileage
from t
where rk =1
order by avg_order_num asc;
  • 先在子查询中使用group by city、driver_id算出需要的city , driver_id, avg_grade,avg_order_num, avg_mileage信息,然后在外循环用rk排序,注意到这里如果有同分也要一起输出,所以采用rank()