select coalesce(driver_id,"总体") ,round(avg(grade),1) from (select driver_id from tb_get_car_record tr join tb_get_car_order `to` using(uid) where date_format(order_time,'%Y-%m') = '2021-10' and start_time is null and tr.order_id is not null ) t join tb_get_car_order using (driver_id) group by driver_id with rollup /*思路: t表就是获取满足过滤条件的司机id, 然后用表连接的方式让订单表里司机id与满足过滤的司机id相同, 获取所有满足过滤条件的司机的订单信息,然后按司机分组,统计每个司机的平均评分。 对于求满足过滤条件的司机的总体平均评分,用with rollup 即可。*/
t表按订单时间年月、有订单号,没上车时间这个逻辑过滤司机,来处理2021年10月有过取消订单记录的司机
排序要求:先按driver_id升序输出,再输出总体情况。
不加order by子句可以提交,加了order by driver_id asc 反而错误,会让 with rolllup 汇总的“总体”变成第一行。如果非要加我也不知道怎么解决。
平均值:分数总和 / 个数总和 。分数求和、个数求和都不对grade 字段值为null 处理,所以不需要对grade 特意滤除null