1)请统计每个城市中评分最高的司机平均评分、日均接单量和日均行驶里程数,接单数包含接单后被取消的订单

    A.最高评分司机(这句话的意思是平均分最高的司机),有多个司机评分并列第一都要输出。
DENSE_RANK()OVER(PARTITION BY city ORDER BY AVG(grade) DESC) RK 
#对司机的平均分进行由大到小排名,因为并列第一都要输出,所以用DENSE_RANK()
    B.平均分数(先求平均分,并对平均分进行排序),保留1位小数
ROUND(AVG(grade),1) 
#平均分,保留1位小数
    C.总接单数,总行驶里程数,出行天数
  • COUNT(order_id) 总接单数
  • SUM(mileage) 总行驶里程数
  • COUNT(DISTINCT DATE(order_time)) 总出现天数
  • 日均接单数=总接单数/出行天数保留,保留1位小数
    ROUND(COUNT(order_id)/COUNT(DISTINCT DATE(order_time)),1)
  • 日均行驶里程数=总行驶里程数/出行天数,保留3位小数
    ROUND(SUM(mileage)/COUNT(DISTINCT DATE(order_time)),3) avg_mileage
  • 按照城市是司机ID进行聚类:GRUP BY city,drive_id
SELECT city,driver_id,AVG(grade) avg_grade,
    COUNT(order_id)/COUNT(DISTINCT DATE(order_time)) avg_order_num,
    SUM(mileage)/COUNT(DISTINCT DATE(order_time)) avg_mileage,
    DENSE_RANK()OVER(PARTITION BY city ORDER BY AVG(grade) DESC) rk
FROM tb_get_car_record JOIN tb_get_car_order USING(order_id) 
GROUP BY city, driver_id

2)结果按照日均接单数升序排列。
SELECT city,driver_id,ROUND(avg_grade,1) avg_grade,ROUND(avg_order_num,1) avg_order_num,ROUND(avg_mileage ,3) avg_mileage
FROM(
SELECT city,driver_id,AVG(grade) avg_grade,
    COUNT(order_id)/COUNT(DISTINCT DATE(order_time)) avg_order_num,
    SUM(mileage)/COUNT(DISTINCT DATE(order_time)) avg_mileage,
	DENSE_RANK()OVER(PARTITION BY city ORDER BY AVG(grade) DESC) rk
FROM tb_get_car_record JOIN tb_get_car_order USING(order_id) GROUP BY city, driver_id
) t1
WHERE rk=1 ORDER BY avg_order_num;