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

如何用SQL查询其他分组均存在但当前分组缺失的非重复数值

需求说明

查询满足如下规则的条目:某数值在非目标的所有其他分组中均存在,但在目标分组中不存在。
示例场景:现有数据表包含column1、column2两列,column1取值为a、b、c三类分组:

  • a对应的column2取值为1、2、3、4
  • b对应的column2取值为1、2、3、4
  • c对应的column2取值仅有1、2、3
    期望输出结果为column1=c、column2=4,也就是目标分组c缺失的、其他所有分组都共有的column2值。
实现思路
  1. 先统计出所有非目标分组里都存在的column2值集合
  2. 匹配过滤出目标分组中不存在的上述集合数值,即为需要的结果
可直接复用的SQL代码

以下写法兼容MySQL、PostgreSQL、SQL Server等绝大多数主流SQL引擎:

-- 替换test_table为你的实际表名,替换'c'为你要查询的目标分组值
SELECT DISTINCT 'c' AS column1, t2.column2
FROM test_table t1
-- 关联其他分组的共有column2值
CROSS JOIN (
    SELECT column2
    FROM test_table
    WHERE column1 != 'c'
    GROUP BY column2
    -- 示例中其他分组为a、b共2个,要求column2在所有其他分组都出现
    HAVING COUNT(DISTINCT column1) = 2
) t2
-- 过滤掉目标分组已存在的column2值
WHERE NOT EXISTS (
    SELECT 1
    FROM test_table t3
    WHERE t3.column1 = 'c' AND t3.column2 = t2.column2
)

如果需要动态计算其他分组数量,无需手动填写数字,可以使用以下通用写法:

SELECT DISTINCT target_group AS column1, t2.column2
FROM (
    -- 这里设置你要查询的目标分组
    SELECT 'c' AS target_group, 
           -- 自动计算其他分组的总数量
           COUNT(DISTINCT column1) AS other_group_count
    FROM test_table
    WHERE column1 != 'c'
) config
CROSS JOIN (
    SELECT column2
    FROM test_table
    WHERE column1 != (SELECT target_group FROM config)
    GROUP BY column2
    HAVING COUNT(DISTINCT column1) = (SELECT other_group_count FROM config)
) t2
WHERE NOT EXISTS (
    SELECT 1
    FROM test_table t3
    WHERE t3.column1 = (SELECT target_group FROM config) AND t3.column2 = t2.column2
)
结果验证

代入你给出的示例数据执行上述SQL,返回结果如下,完全符合预期:

column1column2
c4

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 04:30:05