通过代码

with t as (select    
    driver_id ,
    city,
    count(distinct date(order_time)) days,
    count(*) orders,
    sum(mileage) ways,
    sum(grade) / count(grade) avgs
FROM
    tb_get_car_order
JOIN
    tb_get_car_record
ON
    tb_get_car_order.order_id = tb_get_car_record.order_id
GROUP BY
    driver_id,city)

SELECT
    t.city,
    driver_id,
    round(avgs,1) avg_grade,
    round(orders / days ,1) avg_order_num,
    round(ways / days ,3) avg_mileage
from
    t
join(
select
    city,
    max(avgs) maxs
from
    t
group by 
    city) t2
on
    t.city = t2.city
WHERE
    t.avgs = t2.maxs
ORDER BY
    avg_order_num

思路

请统计每个城市中评分最高的司机平均评分日均接单量日均行驶里程数

注:有多个司机评分并列最高时,都输出

平均评分和日均接单量保留1位小数

日均行驶里程数保留3位小数,按日均接单数升序排序


平均评分 avg(grade)

兼职天数 count(distinct date(order_time)) days,

总接单量 count(driver_id) orders(这里*也可以但是格式问题就id)

总行驶里程数 sum(mileage) ways,

然后就好说了两表连接查出以上数据再分别计算

with t as (select    
    driver_id ,
    city,
    count(distinct date(order_time)) days,
    count(*) orders,
    sum(mileage) ways,
    sum(grade) / count(grade) avgs
FROM
    tb_get_car_order
JOIN
    tb_get_car_record
ON
    tb_get_car_order.order_id = tb_get_car_record.order_id
GROUP BY
    driver_id,city)

有多个司机评分并列最高时,都输出

这个怎么办呢? 我选择对计算结果出来的表进行外连接max

也就是先查出来每个城市最大平均数

select
    city,
    max(avgs) maxs
from
    t
group by 
    city

然后跟计算结果

SELECT
    t.city,
    driver_id,
    round(avgs,1) avg_grade,
    round(orders / days ,1) avg_order_num,
    round(ways / days ,3) avg_mileage
from
    t

连接,where查出来等于最大值的人 最后order by一下

上表
join(上上表) t2
on
    t.city = t2.city
WHERE
    t.avgs = t2.maxs
ORDER BY
    avg_order_num