1、理解题意:统计每个城市中评分最高的司机平均评分、日均接单量和日均行驶里程数
①每个城市👉city👉tb_get_car_record
②评分最高👉grade👉tb_get_car_order
③司机平均评分&司机日均接单量&司机日均行驶里程数👉grade&order_time&mileage👉tb_get_car_order(注意:司机平均评分可直接用avg函数统计,而司机日均接单量&司机日均行驶里程数的 “分母” 计算的则是 “存在接单的天数” ,而非最早接单时间→最晚接单时间)

2、实操:
①创建一张临时表
with sum
as(
    select t1.city,
    t2.driver_id,
    round(avg(t2.grade),1) as avg_grade,
    round(count(t2.order_time) / count(distinct date_format(t2.order_time,'%Y%m%d')),1) as avg_order_num,
	【注意:由于分母为 “存在接单的天数”,因此要对天数按照 “日” 进行去重统计,从而计算出该天数】
    round(sum(t2.mileage) / count(distinct date_format(t2.order_time,'%Y%m%d')),2) as avg_mileage,
	【注意:由于里程数是存在具体数值的,因此分子的mileage要按 “司机” 进行分类汇总计算】
    rank() over(partition by city order by round(avg(t2.grade),1) desc) as city_rank
	【注意:此处排名是按照city进行分组,然后再在city中按照grade进行倒序排序,从而获得每个city的grade排名,进而支持下一步筛选出 “每个城市中评分最高的司机”】

    from tb_get_car_record as t1
    left join tb_get_car_order as t2
    on t1.order_id = t2.order_id

    group by 1,2
)

select city,driver_id,avg_grade,avg_order_num,avg_mileage
from sum
where city_rank = 1
【满足条件:每个城市中评分最高的司机】
order by avg_order_num