题目是:请找到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)