【问题标题】:SQL query to effectively have a "WHERE CLAUSE" after GROUP BYSQL 查询在 GROUP BY 之后有效地具有“WHERE CLAUSE”
【发布时间】:2014-12-23 02:37:55
【问题描述】:

我想知道是否可以选择另一列不包含特定值的所有唯一行(通过按列名进行分组)。例如:

users table
+-------+-----------+
| NAME  | COUNTRY   |
+-------+-----------+
| Bob   | Australia |
+-------+-----------+
| Bob   | America   |
+-------+-----------+
| Steve | Australia |
+-------+-----------+
| Sam   | Australia |
+-------+-----------+
| Sam   | America   |
+-------+-----------+

我要做的是让所有行按 NAME 分组,其中 COUNTRY 不包含美国。

PSUEDO-SQL:SELECT * FROM users GROUP BY Name WHERE COUNTRY NOT LIKE 'America'(显然这不起作用,但这是为了澄清)

上面的输出:

+-------+-----------+
| NAME  | COUNTRY   |
+-------+-----------+
| Steve | Australia |
+-------+-----------+

这可以做到还是我用错了方法?

编辑:我不确定如何写标题,所以如果有人有更好的建议,请更新/告诉我

【问题讨论】:

    标签: mysql sql


    【解决方案1】:

    您不应将select *group by 一起使用。也许你想要:

    SELECT name, country
    FROM users 
    WHERE COUNTRY NOT LIKE 'America' 
    

    或者,如果您想要不在'America' 中的names:

    SELECT name
    FROM users
    GROUP BY name
    HAVING SUM(COUNTRY LIKE 'America') = 0;
    

    【讨论】:

      【解决方案2】:

      以下查询应该有效。

      SELECT DISTINCT name, country FROM table WHERE country != 'America'
      

      【讨论】:

        【解决方案3】:

        选择名称,国家 来自用户 WHERE 国家 '美国' 按国家分组 HAVING count(name) = 1

        编辑:这是我第一次在 Stack Overflow 上发布如此开放的建设性反馈。期待听到您的想法。

        【讨论】:

          猜你喜欢
          • 2010-10-25
          • 2021-12-31
          • 1970-01-01
          • 2012-07-07
          • 1970-01-01
          • 2022-01-21
          • 1970-01-01
          • 1970-01-01
          • 2021-04-01
          相关资源
          最近更新 更多