WITH temp AS ( select city, driver_id, round(avg(grade),1) as avg_grade, round(count(t1.order_id)/count(distinct date(order_time)),1) as avg_order_num, round(sum(mileage)/count(distinct date(order_time)),3) as avg_mileage, rank()over(partition by city order by avg(grade) desc) as rk from tb_get_car_record as t1 inner join tb_get_car_order as t2 on t1.order_id = t2.order_id group by city, driver_id ) select city, driver_id, avg_grade, avg_order_num, avg_mileage from temp where rk = 1 order by avg_order_num
注意:rank()over(partition by city order by avg(grade) desc) as rk,需要avg(grade) ,并不能直接写‘avg_grade'