题目是:请找到2021年10月有过取消订单记录的司机,计算他们每人全部已完成的有评分订单的平均评分及总体平均评分,保留1位小数。先按driver_id升序输出,再输出总体情况。
我们先找出2021年10月有过取消订单记录的司机,代码如下
select distinct driver_id from tb_get_car_order where start_time is null and finish_time is not null #取消订单 and date_format(order_time,'%Y-%m')='2021-10'然后将找到的司机数和打车订单表tb_get_car_order连接,分组聚合求出每个司机的平均评分
select a.driver_id,round(avg(a.grade),1) from tb_get_car_order a join (select distinct driver_id from tb_get_car_order where start_time is null and finish_time is not null and date_format(order_time,'%Y-%m')='2021-10' ) t on a.driver_id=t.driver_id group by a.driver_id order by a.driver_id接着我们再求出整体司机的评分
select '总体',round(avg(a.grade),1) from tb_get_car_order a join (select distinct driver_id from tb_get_car_order where start_time is null and finish_time is not null and date_format(order_time,'%Y-%m')='2021-10' ) t on a.driver_id=t.driver_id上下表用union连接即可,完整代码如下
(select a.driver_id,round(avg(a.grade),1) from tb_get_car_order a join (select distinct driver_id from tb_get_car_order where start_time is null and finish_time is not null and date_format(order_time,'%Y-%m')='2021-10' ) t on a.driver_id=t.driver_id group by a.driver_id order by a.driver_id) union all (select '总体',round(avg(a.grade),1) from tb_get_car_order a join (select distinct driver_id from tb_get_car_order where start_time is null and finish_time is not null and date_format(order_time,'%Y-%m')='2021-10' ) t on a.driver_id=t.driver_id)