分组后在 SQL 中过滤不同的值

Filter in SQL on distinct values after grouping

我有一个像

这样的数据集
col1       col2       col3
A          x          1
A          x          2
A          x          3
B          y          4
B          -y         5
B          y          6
C          -z         7
C          z          8
C          -z         9
D          t          10
D          t          11
D          t          12

我怎样才能从 col1 中挑选出在 col2 中具有不同值的组?所以在这种情况下是 A,D。

类似

select * from table t1
where (select count(distinct col2)
       from table t2
       where t1.col1 = t2.col1) > 1

但更优化?

您可以使用 group byhaving:

select col1
from t
group by col1
having min(col2) <> max(col2);

如果您只需要 col1 列,您可以 group by col1 并在 HAVING 子句中设置条件:

SELECT col1
FROM tablename
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 1;

如果您想要 table 中的所有行,请将上述查询与运算符 IN:

结合使用
SELECT *
FROM tablename 
WHERE col1 IN (
  SELECT col1
  FROM tablename
  GROUP BY col1
  HAVING COUNT(DISTINCT col2) = 1
)