分组后在 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 by
和 having
:
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
)
我有一个像
这样的数据集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 by
和 having
:
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
)