SQL查询有效地拥有" WHERE CLAUSE"在GROUP BY之后

时间:2014-12-23 02:37:56

标签: mysql sql

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

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

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

PSUEDO-SQL :SELECT * FROM users GROUP BY名称国家不喜欢' America' (显然这不起作用,但需要澄清)

上面的输出:

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

可以这样做还是我接近错误的方式?

编辑:我不确定如何标题,如果有人有更好的建议,请更新/让我知道

3 个答案:

答案 0 :(得分:2)

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

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

或者,如果您希望name中没有'America'

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

答案 1 :(得分:1)

以下查询应该有效。

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

答案 2 :(得分:1)

SELECT name,country 来自用户 在哪里国家<> '美国' GROUP BY国家 有计数(名字)= 1

编辑:这是我的第一个Stack Overflow帖子,因此对建设性反馈持开放态度。期待听到你的想法。