如何用SQL筛选A列值相同但B、C列值均不同的行?
解决A列相同但B、C列均不重复的行筛选问题
嗨,我来帮你搞定这个筛选需求!根据你的示例,我们需要找出同一A列分组下,B列和C列各自都没有重复值的行。下面分两种常用场景给你具体实现方法:
方法一:Excel 实现
最直观的方式是用辅助列+筛选:
- 在表格右侧添加一列(比如D列),在D2单元格输入以下公式:
=AND(COUNTIFS($A:$A,$A2,$B:$B,$B2)=1,COUNTIFS($A:$A,$A2,$C:$C,$C2)=1) - 把公式下拉填充到所有行,公式会返回
TRUE或FALSE:COUNTIFS($A:$A,$A2,$B:$B,$B2)=1:判断当前行的B值在同一A组中是否唯一COUNTIFS($A:$A,$A2,$C:$C,$C2)=1:判断当前行的C值在同一A组中是否唯一AND()确保两个条件同时满足
- 最后筛选D列为
TRUE的行,就能得到你想要的第5、6、7行啦!
方法二:SQL 实现
如果是在数据库中处理,可以用窗口函数来高效筛选:
WITH grouped_data AS ( SELECT *, -- 统计同一A组内相同B值的行数 COUNT(*) OVER (PARTITION BY A, B) AS b_unique_count, -- 统计同一A组内相同C值的行数 COUNT(*) OVER (PARTITION BY A, C) AS c_unique_count FROM your_table -- 替换成你的表名 ) SELECT * FROM grouped_data WHERE b_unique_count = 1 AND c_unique_count = 1;
这个查询会先给每行标记出同一A组内B、C值的重复次数,再筛选出两个次数都为1的行,正好匹配你的需求。
举个对应示例的解释:
- item1组:C列都是Amy,所以
c_unique_count=2,不符合条件 - item2组:B列都是Mar,所以
b_unique_count=2,不符合条件 - item3组:两个行的B、C值各自都不重复,两个计数都是1,符合条件
- item4组:只有一行,B、C自然唯一,符合条件
内容的提问来源于stack exchange,提问作者Kuro




