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

如何筛选Col1与Col2中所有Col3值符合LIKE %ABGS%的记录

筛选满足全部分组条件的Col1和Col2记录

需求说明

需要从数据表中提取Col1和Col2的记录,但仅保留**Col1+Col2分组下所有Col3值均包含"ABGS"**的条目。若某个Col1+Col2分组中存在任意一条Col3值不满足LIKE '%ABGS%',则该分组的所有记录都需排除。

示例数据

原表格

Col1Col2Col3
PSPID_1POSID_10FREI ABGS EROF
PSPID_1POSID_11ABGS EROF
PSPID_1POSID_12FREI ABGS
PSPID_2POSID_20FREI ABGS
PSPID_2POSID_21EROF
PSPID_3POSID_30ABGS EROF
PSPID_3POSID_31ABGS EROF
PSPID_3POSID_32FREI ABGS EROF
PSPID_3POSID_33FREI ABGS

期望结果

Col1Col2
PSPID_1POSID_10
PSPID_1POSID_11
PSPID_1POSID_12
PSPID_3POSID_30
PSPID_3POSID_31
PSPID_3POSID_32
PSPID_3POSID_33

规则说明

  • PSPID_1的所有Col2分组(POSID_10/11/12)对应的Col3都包含"ABGS",全部保留
  • PSPID_2的分组中,POSID_21的Col3不含"ABGS",因此该PSPID_2下的所有记录都排除
  • PSPID_3的所有Col2分组对应的Col3都包含"ABGS",全部保留

数据聚类结构

  • PSPID_1
    • POSID_10
    • POSID_11
    • POSID_12
  • PSPID_2
    • POSID_20
    • POSID_21
  • PSPID_3
    • POSID_30
    • POSID_31
    • POSID_32
    • POSID_33
  • PSPID_4
    • POSID_40
    • POSID_41
      ……

实现方案

方法1:使用NOT EXISTS子查询

通过子查询找出所有存在不满足条件的Col1+Col2分组,再排除这些分组的记录:

SELECT DISTINCT Col1, Col2
FROM your_table t1
WHERE NOT EXISTS (
    SELECT 1
    FROM your_table t2
    WHERE t1.Col1 = t2.Col1
      AND t1.Col2 = t2.Col2
      AND t2.Col3 NOT LIKE '%ABGS%'
);

方法2:使用GROUP BY和HAVING

先按Col1+Col2分组,筛选出所有分组内的Col3都满足条件的分组,再关联原表获取记录:

SELECT t1.Col1, t1.Col2
FROM your_table t1
JOIN (
    SELECT Col1, Col2
    FROM your_table
    GROUP BY Col1, Col2
    HAVING COUNT(CASE WHEN Col3 NOT LIKE '%ABGS%' THEN 1 END) = 0
) t2 ON t1.Col1 = t2.Col1 AND t1.Col2 = t2.Col2;

或者更简洁的HAVING写法(适配多数主流数据库):

SELECT Col1, Col2
FROM your_table
GROUP BY Col1, Col2
HAVING SUM(CASE WHEN Col3 NOT LIKE '%ABGS%' THEN 1 ELSE 0 END) = 0;

(注:若需保留重复的Col1+Col2记录,去掉GROUP BY,改用关联子查询的方式即可)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 13:32:52