【问题标题】:Filter in SQL on distinct values after grouping分组后在 SQL 中过滤不同的值
【发布时间】:2021-08-10 20:36:10
【问题描述】:

我有一个类似的数据集

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

但更优化?

【问题讨论】:

    标签: sql group-by distinct


    【解决方案1】:

    您可以使用group byhaving

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

    【讨论】:

    • 如果 OP 想要 col2 具有不同值的实例,不应该是min(col2) = max(col2)吗?
    • @Andrew。 . . “不同的值”意味着这些值不是唯一的——至少我是如何阅读这个问题的。
    【解决方案2】:

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

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

    如果您想要表中的所有行,请使用上面的查询和运算符 IN:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-12-06
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多