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

Oracle SQL查询需求:筛选同时包含ABC和ANQ的分组数据

Oracle SQL 查询:筛选同时包含指定元素的分组并返回全部分组数据

方法一:子查询 + GROUP BY HAVING

这种方法先筛选出符合条件的分组ID,再关联原表返回全部分组数据,逻辑清晰且兼容性好:

SELECT t."group X", t."Column Q"
FROM your_table t
WHERE t."group X" IN (
    SELECT "group X"
    FROM your_table
    WHERE "Column Q" IN ('ABC', 'ANQ')
    GROUP BY "group X"
    HAVING COUNT(DISTINCT "Column Q") = 2
);

逻辑说明:

  1. 子查询中先过滤出Column Q为'ABC'或'ANQ'的记录
  2. 按group X分组后,通过COUNT(DISTINCT "Column Q") = 2确保该分组同时包含两个目标元素
  3. 外层查询关联符合条件的分组,返回该分组下的所有数据行

方法二:窗口函数(Oracle 12c+)

如果使用较新版本的Oracle,窗口函数可以避免子查询关联,效率更优:

WITH group_check AS (
    SELECT 
        "group X", 
        "Column Q",
        -- 统计当前分组内是否存在'ABC'
        COUNT(CASE WHEN "Column Q" = 'ABC' THEN 1 END) OVER (PARTITION BY "group X") AS has_abc,
        -- 统计当前分组内是否存在'ANQ'
        COUNT(CASE WHEN "Column Q" = 'ANQ' THEN 1 END) OVER (PARTITION BY "group X") AS has_anq
    FROM your_table
)
SELECT "group X", "Column Q"
FROM group_check
WHERE has_abc > 0 AND has_anq > 0;

逻辑说明:

  1. 用PARTITION BY "group X"在每个分组内计算目标元素的出现次数
  2. 筛选出两个目标元素都存在(次数大于0)的分组数据

注意事项

  • 将代码中的your_table替换为你的实际表名
  • 如果Column Q在同一个group X内不会重复出现,子查询中的COUNT(DISTINCT)可以简化为COUNT(*),但保留DISTINCT能避免同一元素重复出现导致的误判

验证结果

针对你提供的样本数据,执行上述任意一种查询,都会返回:

group X   Column Q
--------   ---------
123        ABC
123        AAA    
123        ANQ

内容的提问来源于stack exchange,提问作者Captain Tyler

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 22:46:03