在SQL中对分组后的不同值进行筛选
我有一个类似的数据集在SQL中对分组后的不同值进行筛选,sql,group-by,distinct,Sql,Group By,Distinct,我有一个类似的数据集 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
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并拥有:
如果只需要col1列,则可以按col1分组,并在HAVING子句中设置条件:
SELECT col1
FROM tablename
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 1;
如果需要表中的所有行,请使用上面的查询,并在中使用运算符:
如果OP想要col2具有不同值的实例,它不应该是mincol2=maxcol2吗?@Andrew。不同的值意味着这些值不是唯一的——至少我是如何理解这个问题的。
SELECT col1
FROM tablename
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 1;
SELECT *
FROM tablename
WHERE col1 IN (
SELECT col1
FROM tablename
GROUP BY col1
HAVING COUNT(DISTINCT col2) = 1
)