朋友们,俺指定是写复杂了 第一步t1: 计算所有城市的最高评分,用于后面过滤筛选 重点是测试天津的时候,有一天没有里程,却不能为null,因为avg会出错
t1 as
(select
city,max(avg_grade) as max_grade
from
(select
b.city,a.driver_id,avg(a.grade) as avg_grade
from
tb_get_car_order a
left join tb_get_car_record b using(order_id)
group by 1,2) a
group by 1)
,
t2 as
(select b.city,date_format(a.order_time,'%Y%m%d'),a.driver_id,
ifnull(count(a.order_time),0) as order_num,
ifnull(sum(mileage),0) as mileage_num
from tb_get_car_order a
left join tb_get_car_record b using(order_id)
group by 1,2,3
)
,
t3 as
(select city,driver_id,avg(order_num) as avg_order_num,avg(mileage_num) as avg_mileage
from t2
group by 1,2
)
,
t4 as
(select
b.city,a.driver_id,avg(a.grade) as avg_grade
from
tb_get_car_order a
left join tb_get_car_record b using(order_id)
group by 1,2)
select
t3.city,t3.driver_id,round(t4.avg_grade,1),round(t3.avg_order_num,1),
round(t3.avg_mileage,3)
from
t3
left join t4 using(driver_id)
where (t3.city,t4.avg_grade) in (select * from t1)
order by 4 asc

京公网安备 11010502036488号