求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
相关产品推荐
相关产品推荐

