SQL查询哪种配送模式延迟订单数最高,代码输出为空求排错
故障排查与修复方案
直接导致输出为空的核心错误
你在WHERE子句中使用了AND逻辑,要求同一条记录的shipment_compliance字段同时等于「UPTO 2 DAYS OF DELAY」和「BEYOND 2 DAYS OF DELAY」两个完全不同的值,不存在任何符合该条件的记录,因此查询结果为空。
其余需要修正的逻辑&语法问题
- CASE判断逻辑存在歧义:最后一个延迟分支的判断条件
Real_Shipping_Days>Scheduled_Shipping_Days可优化为Real_Shipping_Days>Scheduled_Shipping_Days + 2,明确匹配延迟超过2天的场景,避免后续调整逻辑时出现判断顺序错误。 - 分组语法不规范:
GROUP BY Shipping_Mode DESC不符合标准SQL语法,DESC是排序关键字,不能直接加在GROUP BY的字段后。 - 缺少排序取数逻辑:要得到延迟订单最多的配送模式,需要对统计后的订单数做降序排序,再取第一条结果。
修复后的完整代码
WITH summary AS ( SELECT order_id, Real_Shipping_Days, Scheduled_Shipping_Days, Shipping_Mode, order_status, CASE WHEN order_status = 'SUSPECTED FRAUD' OR order_status = 'CANCELED' THEN 'CANCELLED SHIPMENT' WHEN Real_Shipping_Days < Scheduled_Shipping_Days THEN 'WITHIN SCHEDULE' WHEN Real_Shipping_Days = Scheduled_Shipping_Days THEN 'ON TIME' WHEN Real_Shipping_Days <= Scheduled_Shipping_Days + 2 THEN 'UPTO 2 DAYS OF DELAY' WHEN Real_Shipping_Days > Scheduled_Shipping_Days + 2 THEN 'BEYOND 2 DAYS OF DELAY' ELSE 'OTHERS' END AS shipment_compliance FROM orders ) SELECT COUNT(order_id) as order_count, Shipping_Mode FROM summary WHERE shipment_compliance IN ('UPTO 2 DAYS OF DELAY', 'BEYOND 2 DAYS OF DELAY') GROUP BY Shipping_Mode ORDER BY order_count DESC LIMIT 1;
内容的提问来源于stack exchange,提问作者Sooraj Rajesh
相关产品推荐
相关产品推荐

