You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何用SQL筛选A列值相同但B、C列值均不同的行?

解决A列相同但B、C列均不重复的行筛选问题

嗨,我来帮你搞定这个筛选需求!根据你的示例,我们需要找出同一A列分组下,B列和C列各自都没有重复值的行。下面分两种常用场景给你具体实现方法:

方法一:Excel 实现

最直观的方式是用辅助列+筛选

  1. 在表格右侧添加一列(比如D列),在D2单元格输入以下公式:
    =AND(COUNTIFS($A:$A,$A2,$B:$B,$B2)=1,COUNTIFS($A:$A,$A2,$C:$C,$C2)=1)
    
  2. 把公式下拉填充到所有行,公式会返回TRUEFALSE
    • COUNTIFS($A:$A,$A2,$B:$B,$B2)=1:判断当前行的B值在同一A组中是否唯一
    • COUNTIFS($A:$A,$A2,$C:$C,$C2)=1:判断当前行的C值在同一A组中是否唯一
    • AND()确保两个条件同时满足
  3. 最后筛选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

火山引擎 最新活动