1.先计算所有司机的平均评分,平均订单数,平均里程

select city, driver_id,avg(grade) avg_grade,
count(order_id)/count(distinct date(order_time)) avg_order_num,
sum(mileage)/count(distinct date(order_time)) avg_mileage
from tb_get_car_order
join 
tb_get_car_record
using(order_id)
group by city,driver_id

得到下表

alt

2.用rank() over() 窗口函数得到排名(按城市分区按平均分数降序)

select *, rank() over(partition by city order by avg_grade desc) rk from (
select city, driver_id,avg(grade) avg_grade,
count(order_id)/count(distinct date(order_time)) avg_order_num,
sum(mileage)/count(distinct date(order_time)) avg_mileage
from tb_get_car_order
join 
tb_get_car_record
using(order_id)
group by city,driver_id) t1;

得到下表

alt

3.最后,取整,并筛选排名为1的数据,结果按照avg_order_num升序,最终的sql为

select city,driver_id,round(avg_grade,1) avg_grade ,round(avg_order_num,1) avg_order_num,
round(avg_mileage,3) avg_mileage
from
(select *, rank() over(partition by city order by avg_grade desc) rk from 
(select city, driver_id,avg(grade) avg_grade,
count(order_id)/count(distinct date(order_time)) avg_order_num,
sum(mileage)/count(distinct date(order_time)) avg_mileage
from tb_get_car_order
join 
tb_get_car_record
using(order_id)
group by city,driver_id) t1) t2
where rk =1
order by avg_order_num

得到正确结果