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?