SQL175 有取消订单记录的司机平均评分

  1. 子查询: 子查询首先执行,它的目的是找出所有在2021年10月有未定义票价的司机ID。

    • SELECT driver_id FROM tb_get_car_order:选择司机ID。
    • WHERE DATE_FORMAT(order_time, "%Y-%m")='2021-10':条件限制了只有2021年10月的订单。
    • AND ISNULL(fare):条件进一步限制了只有那些票价为NULL的订单。
  2. 外部查询: 外部查询使用子查询的结果,并计算这些司机的平均评分。

    • SELECT IFNULL(driver_id, "总体") as driver_id, ROUND(AVG(grade), 1) as avg_grade:这里使用了IFNULL函数,如果driver_id为NULL(这将在WITH ROLLUP生成的总计行中发生),则将其替换为"总体"。同时,计算平均评分(AVG(grade))并四舍五入到小数点后一位。
    • FROM tb_get_car_order:指定了查询的表。
    • WHERE driver_id in (...):条件限制了只有子查询中找到的司机ID。
    • AND NOT ISNULL(grade):条件排除了那些没有评分的订单。
    • GROUP BY driver_id:按照司机ID对结果进行分组。
    • WITH ROLLUP:这个修饰符会在分组的结果基础上再进行一次额外的汇总,即对分组的结果进行小计和总计。

最终,这个查询返回了每个符合条件司机的平均评分,以及一个总计行,显示了所有符合条件的司机的平均评分。总计行的司机ID列将显示为"总体"。

select ifnull(driver_id, "总体") as driver_id,
round (avg(grade), 1) as avg_grade
from tb_get_car_order
where driver_id in
(
    select driver_id
    from tb_get_car_order
    where date_format(order_time, "%Y-%m") = '2021-10' and isnull(fare)
) and not isnull(grade)
group by driver_id
with rollup;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值