with t as (
select city , driver_id, avg_grade,avg_order_num, avg_mileage,rank()over(partition by city order by avg_grade desc) 'rk'
from
(
select
city,
driver_id,
round(avg(grade),1) 'avg_grade',
round(count(*) / count(distinct date_format(order_time, '%Y-%m-%d')), 1) 'avg_order_num',
round(sum(mileage) / count(distinct date_format(order_time, '%Y-%m-%d')), 3) 'avg_mileage'
from tb_get_car_order co
join tb_get_car_record r on r.order_id = co.order_id
group by city, driver_id
) a
)
select city , driver_id, avg_grade,avg_order_num, avg_mileage
from t
where rk =1
order by avg_order_num asc;
- 先在子查询中使用group by city、driver_id算出需要的city , driver_id, avg_grade,avg_order_num, avg_mileage信息,然后在外循环用rk排序,注意到这里如果有同分也要一起输出,所以采用rank()