题解 | #有取消订单记录的司机平均评分#
有取消订单记录的司机平均评分
https://www.nowcoder.com/practice/f022c9ec81044d4bb7e0711ab794531a
# 这道题学到的是排序问题,with rollup在表末尾追加,因此“先按driver_id升序输出,再输出总体情况”,可考虑在上一步中就按照driver_id排好序,最后一步在计算并添加with rollup。
# 问题:请找到2021年10月有过取消订单记录的司机,
with dr_id as (
select driver_id
from tb_get_car_order
where date_format(order_time,'%Y-%m')='2021-10'
and start_time is null )
# 这些司机订单情况,按driver_id升序输出,
,or_in as (
select driver_id,order_time,grade
from dr_id
join tb_get_car_order using(driver_id)
where grade is not null
and date_format(order_time,'%Y-%m')='2021-10'
order by driver_id )
# 计算他们每人全部已完成的有评分订单的平均评分及总体平均评分,保留1位小数。
#这一步可以与上一步放到一起,但这样写更清晰明了
select ifnull(driver_id,"总体") as driver_id
,round(sum(grade)/count(order_time),1) as avg_grade
from or_in
group by driver_id
with rollup