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;