如何筛选仅与单一B列值配对的A列值?
解决方法
首先,你原语句无效大概率是因为表名用了SQL关键字Table,需要用反引号(MySQL)或方括号(SQL Server)包裹,修正后的语句应该是:
SELECT A FROM `Table` GROUP BY A HAVING COUNT(DISTINCT B) = 1;
如果还是有问题,或者你需要其他实现方式,这里提供两种替代方案:
方案一:通过MIN和MAX判断
如果同一A对应的B值完全一致,那么该分组下B的最小值和最大值必然相等,利用这一点可以实现筛选:
SELECT A FROM `Table` GROUP BY A HAVING MIN(B) = MAX(B);
这种方法不需要计算去重数量,在数据量较大时性能可能更优。
方案二:使用窗口函数
通过窗口函数先计算每个A对应的B值唯一数量,再筛选符合条件的记录:
SELECT DISTINCT A FROM ( SELECT A, COUNT(DISTINCT B) OVER (PARTITION BY A) AS b_unique_count FROM `Table` ) AS sub WHERE b_unique_count = 1;
内容的提问来源于stack exchange,提问作者Mikis
相关产品推荐
相关产品推荐

