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

求SQL查询语句:获取A、B、C列相同D列不同的所有记录

解决SQL筛选A/B/C相同且D列存在不同值的记录问题

没问题,我来帮你搞定这个SQL查询需求!你需要的是找出表中所有A、B、C三列取值完全一致,且同一组内D列存在不同取值的所有记录,下面是两种实用的解决方案:

原始数据表

A B C D
1 Cat XYZ 12
1 Cat XYZ 13
1 Dog XYZ 14
2 Dog ABC 15
2 Dog ABC 16
3 Cat XYZ 17

期望结果集

A B C D
1 Cat XYZ 12
1 Cat XYZ 13
2 Dog ABC 15
2 Dog ABC 16

方法1:使用窗口函数(推荐,性能更优)

窗口函数可以直接在每行标记其所属A/B/C组的不同D值数量,再筛选符合条件的行:

SELECT A, B, C, D
FROM (
    SELECT 
        A, B, C, D,
        -- 计算每个A/B/C组内不同D值的数量
        COUNT(DISTINCT D) OVER (PARTITION BY A, B, C) AS distinct_d_count
    FROM your_table_name -- 替换成你的实际表名
) t
-- 筛选出组内有至少2个不同D值的行
WHERE distinct_d_count >= 2;

方法2:分组子查询关联原表

先找出符合条件的A/B/C组合,再关联原表获取对应记录:

SELECT t.A, t.B, t.C, t.D
FROM your_table_name t -- 替换成你的实际表名
INNER JOIN (
    -- 先筛选出A/B/C组内不同D值数量>=2的组合
    SELECT A, B, C
    FROM your_table_name
    GROUP BY A, B, C
    HAVING COUNT(DISTINCT D) >= 2
) sub ON t.A = sub.A AND t.B = sub.B AND t.C = sub.C;

两种方法都能精准得到你想要的结果,其中窗口函数的写法更简洁,在大数据量下的性能表现也更好。记得把your_table_name替换成你实际使用的表名哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:04