Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在SQL中对分组后的不同值进行筛选_Sql_Group By_Distinct - Fatal编程技术网

在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
)