WITH
    t1 AS (
        SELECT
            b.city,
            a.driver_id,
            ROUND(AVG(grade), 1) AS avg_grade
        FROM
            tb_get_car_order a
            LEFT JOIN tb_get_car_record b ON a.order_id = b.order_id
        WHERE
            start_time is not NULL
        GROUP BY
            b.city,
            a.driver_id
        ORDER BY
            b.city,
            a.driver_id
    ),
    t2 AS (
        SELECT
            city,
            driver_id,
            avg_grade,
            rank() over (
                PARTITION BY
                    city
                ORDER BY
                    avg_grade DESC
            ) AS rank_num
        FROM
            t1
    ),
    t3 AS (
        SELECT
            *
        FROM
            t2
        WHERE
            rank_num = 1
    ),
    t4 AS (
        SELECT
            b.city,
            a.driver_id,
            DATE (a.order_time) AS dt,
            IFNULL (a.mileage, 0) AS mileage
        FROM
            tb_get_car_order a
            LEFT JOIN tb_get_car_record b ON a.order_id = b.order_id
        WHERE
            (b.city, a.driver_id) IN (
                SELECT
                    t3.city,
                    t3.driver_id
                FROM
                    t3
            )
    ),
    t5 AS (
        SELECT
            city,
            driver_id,
            ROUND(count(driver_id) / count(DISTINCT dt), 1) as avg_order_num,
            ROUND(sum(mileage) / count(DISTINCT dt), 3) as avg_mileage
        FROM
            t4
        GROUP BY
            city,
            driver_id
    )
SELECT
    t3.city,
    t3.driver_id,
    t3.avg_grade,
    t5.avg_order_num,
    t5.avg_mileage
FROM
    t3
    LEFT JOIN t5 ON t3.driver_id = t5.driver_id
    AND t3.city = t5.city
ORDER BY
    t5.avg_order_num;

# 这道题的关键在于,评分均值是成单的评分,而接单数则是包括取消单子!还有一个就是时间距离计算!