如何统计仅包含指定编码XXX的唯一订单总数量
问题原因排查
你当前的SQL逻辑存在疏漏:执行WHERE item_code = 'XXX'时已经提前过滤掉了所有非XXX的商品行,导致SQL无法识别同一个订单是否还包含其他编码的商品,自然会把同时存在XXX和其他商品的订单(比如示例中的123)也统计进来,不符合需求。
正确实现方案
核心逻辑是**按订单分组后,判断该订单是否同时满足「没有非XXX的商品」+「至少存在1个XXX商品」**两个条件。
如果需要先查看所有符合条件的订单ID,语句如下:
SELECT order_id FROM table_a GROUP BY order_id HAVING -- 订单内不存在任何非XXX的商品 COUNT(CASE WHEN `item code` != 'XXX' THEN 1 END) = 0 -- 订单内至少有一个XXX商品,排除完全没有XXX的订单 AND COUNT(CASE WHEN `item code` = 'XXX' THEN 1 END) > 0;
如果需要直接得到最终统计的总数,直接在外层套COUNT即可:
SELECT COUNT(*) AS valid_order_total FROM ( SELECT order_id FROM table_a GROUP BY order_id HAVING COUNT(CASE WHEN `item code` != 'XXX' THEN 1 END) = 0 AND COUNT(CASE WHEN `item code` = 'XXX' THEN 1 END) > 0 ) t;
结果验证
针对你提供的示例数据,上述语句会筛选出订单456、789,最终统计结果为2,完全符合预期。
注:如果你的字段名是带空格的
item code,需要用反引号包裹,避免语法报错,建议后续规范字段名使用下划线分隔(如item_code)。
内容的提问来源于stack exchange,提问作者datanerd
相关产品推荐
相关产品推荐

