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

Oracle SQL:筛选指定订阅组合且不含A3设施的唯一用户ID

解决SUBSCRIPTIONS表的用户筛选问题

需求明确

要筛选出满足以下两个条件的唯一User Id:

  1. 该用户拥有Category='A'、Rank='B'、Method='C'的订阅组合
  2. 该用户的上述订阅组合中完全不存在Amenity='A3'的记录

错误写法的问题

之前用WHERE ... AND Amenity != 'A3'的写法只排除了单条A3记录,但如果用户同时有该组合下的A3和其他设施,剩余行仍会让这个用户被错误选中,无法满足“该组合不含A3”的核心要求。

正确实现方案

方案一:使用NOT EXISTS子查询

直接检查用户在目标订阅组合下是否存在A3记录,不存在则保留:

SELECT DISTINCT s.User_Id
FROM SUBSCRIPTIONS s
WHERE s.Category = 'A' 
  AND s.Rank = 'B' 
  AND s.Method = 'C'
  AND NOT EXISTS (
    SELECT 1
    FROM SUBSCRIPTIONS s2
    WHERE s2.User_Id = s.User_Id
      AND s2.Category = 'A'
      AND s2.Rank = 'B'
      AND s2.Method = 'C'
      AND s2.Amenity = 'A3'
  );

方案二:分组后用HAVING过滤

通过分组统计每个用户在目标组合下的A3记录数,数量为0则符合要求:

SELECT User_Id
FROM SUBSCRIPTIONS
WHERE Category = 'A' 
  AND Rank = 'B' 
  AND Method = 'C'
GROUP BY User_Id
HAVING SUM(CASE WHEN Amenity = 'A3' THEN 1 ELSE 0 END) = 0;

样本数据验证

针对你的样本数据,两种方案都会正确返回User Id A001——因为A001在目标订阅组合下没有任何A3记录;而如果有用户同时存在该组合下的A3和其他设施,会被正确排除。

内容的提问来源于stack exchange,提问作者Wayne Eastwood

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 05:57:05