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

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

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

-- 思路:

  • -- 1.先按城市,司机分组统计每个司机的avg_grade,avg_order_num,avg_mileage
  • -- 2.然后使用dense_rank函数按照城市分组,按平均评分降序排序
  • -- 3.取排序第一的记录,按照日均接单数升序
-- 思路:
--      1.先按城市,司机分组统计每个司机的avg_grade,avg_order_num,avg_mileage
--      2.然后使用dense_rank函数按照城市分组,按平均评分降序排序
--      3.取排序第一的记录,按照日均接单数升序
with
    t1 as (
        select
            r.city,
            o.driver_id,
            round(avg(grade), 1) as avg_grade,
            round(
                count(o.order_id) / count(distinct date_format (o.order_time, '%Y-%m-%d')),
                1
            ) as avg_order_num,
            round(
                sum(mileage) / count(distinct date_format (o.order_time, '%Y-%m-%d')),
                3
            ) as avg_mileage
        from
            tb_get_car_order o
            join tb_get_car_record r on o.order_id = r.order_id
        group by
            r.city,
            o.driver_id
    ),
    t2 as (
        select
            city,
            driver_id,
            avg_grade,
            avg_order_num,
            avg_mileage,
            dense_rank() over (
                partition by
                    city
                order by
                    avg_grade desc
            ) as rk
        from
            t1
    )
select
    city,
    driver_id,
    avg_grade,
    avg_order_num,
    avg_mileage
from
    t2
where
    rk = 1
order by
    avg_order_num
SQL大厂面试题 文章被收录于专栏

牛客网sql大厂面试题题解~

全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务