题解 | #每个城市中评分最高的司机信息#

每个城市中评分最高的司机信息

https://www.nowcoder.com/practice/dcc4adafd0fe41b5b2fc03ad6a4ac686

说实话,题意描述确实是有误导性的,需要统计的是平均分评分最高的司机数据,而不是评分最高的司机。

注意点:日均接单数,日均行驶里程数。一日可能有多单,但是对该日做分母只能计为1

sum(co.mileage) / count(distinct date(co.order_time)) as avg_mileage

另一个技巧在于求平均评分最大的司机,可以可以用窗口函数rank()对分组后的均值进行倒序排序,值为1则表示该司机平均分最高。

rank() over(partition by cr.city order by avg(co.grade) desc) rank1

注:窗口函数运行顺序在分组之后。对分组后聚合之后的数据进行处理。

select t1.city, t1.driver_id, t1.avg_grade, t1.avg_order_num, t1.avg_mileage
from (
    select cr.city,
        co.driver_id,
        round(avg(co.grade), 1) as avg_grade,
        rank() over(partition by cr.city order by avg(co.grade) desc) rank1,
        round(count(1) / count(distinct date(co.order_time)), 1) as avg_order_num,
        sum(co.mileage) / count(distinct date(co.order_time)) as avg_mileage
    from tb_get_car_order co
    inner join tb_get_car_record cr on cr.order_id=co.order_id
    group by cr.city, co.driver_id
) t1
where t1.rank1=1
order by avg_order_num asc

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务