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
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;