题解 | #SQL21 每个城市中评分最高的司机信息#
每个城市中评分最高的司机信息
http://www.nowcoder.com/practice/dcc4adafd0fe41b5b2fc03ad6a4ac686
解体思路
- 先group by city,driver_id求出一个新表格t1,即相同城市相同司机的平均评分,平均接***均里程.
- 在t1表格基础上,打印出所有的行,并且新添一列进行从大到小排序,又生成新的表格t2,利用窗口函数rank()对平均评分从大到小排序,相同分数是同样的排名,即第一有很多也可以同时输出
- 在t2基础上,打印出除排序列以外的所有列就好啦
select
city,
driver_id,
avg_grade,
avg_order_num,
avg_mileage
from
(select
*,
rank() over (partition by city order by avg_grade desc) as paixu
from
(select
city,
driver_id,
round(sum(grade)/sum(if(grade>0,1,0)),1) as avg_grade,
round(count(order_time)/count(distinct date(order_time)),1) as avg_order_num,
round(sum(mileage)/count(distinct date(order_time)),3) as avg_mileage
from tb_get_car_order tgco
join tb_get_car_record tfcr
on tgco.order_id=tfcr.order_id and tgco.uid=tfcr.uid
group by city,driver_id
order by avg_grade desc) t1)t2
where paixu=1
order by avg_order_num