select 
city,
driver_id,
perday_rank,
perday_order,
perday_mileage
from
(select
city,
driver_id,
round(avg(grade),1) as perday_rank,
round(count(*) / count(distinct date(event_time)),1) as perday_order,
round(sum(mileage) / count(distinct date(event_time)),3) as perday_mileage,
dense_rank() over(partition by city order by avg(grade) desc) rk

from  tb_get_car_record a left join tb_get_car_order b using(order_id)
where a.order_id is not null
group by city,driver_id) t1
where rk = 1
order by perday_order

思路很简单,唯一被卡住的点是不知道怎么输出共同排名时排名第一的数据。

关键的没懂:为什么在使用了group函数找到了按城市和司机的分组时,窗口函数只partition by了city,仍然会按城市和司机进行排序?不会报错???窗口函数中根本就没设定司机的信息,为什么他排序用的grade还是不同司机的grade?