You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

获取从未出现订单失败的忠诚客户ID的SQL查询需求

筛选忠诚客户ID的SQL解决方案

嘿,这问题我熟,给你几个实用的SQL写法,都能精准筛选出那些从没出过失败订单的忠诚客户ID(也就是所有订单状态都是成功S的客户):

方法1:用NOT EXISTS(性能友好,逻辑清晰)

这种写法是数据库优化器比较喜欢的,逻辑也直白——找出不存在任何失败订单的客户:

SELECT DISTINCT cust_id
FROM Order
WHERE NOT EXISTS (
    SELECT 1
    FROM Order o2
    WHERE o2.cust_id = Order.cust_id
      AND o2.status = 'F'
);

小说明:加DISTINCT是因为同一个客户可能有多个成功订单,避免重复返回同一个客户ID。

方法2:用GROUP BY + HAVING分组校验

通过对客户ID分组,检查组内有没有失败订单:
如果订单状态只有S和F两种,简洁写法:

SELECT cust_id
FROM Order
GROUP BY cust_id
HAVING MAX(status) != 'F';

要是担心有其他状态值,更严谨的写法(统计失败订单数为0):

SELECT cust_id
FROM Order
GROUP BY cust_id
HAVING SUM(CASE WHEN status = 'F' THEN 1 ELSE 0 END) = 0;

小说明:第二种HAVING子句会统计每个客户的失败订单数量,等于0就说明完全没有失败订单,符合忠诚客户的定义。

方法3:用NOT IN排除法

先找出所有有过失败订单的客户ID,再从总客户里排除他们:

SELECT DISTINCT cust_id
FROM Order
WHERE cust_id NOT IN (
    SELECT cust_id
    FROM Order
    WHERE status = 'F'
);

小提醒:如果你的数据里存在cust_id为NULL的情况,NOT IN可能会出问题,这时候优先用方法1更稳妥。

内容的提问来源于stack exchange,提问作者pratik deshai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 12:42:35