2014-12-23 3 views
1

Мне было интересно, можно ли выбрать все уникальные строки (путем создания группы по имени столбца), где другой столбец не содержит конкретных значений. EG:SQL-запрос, чтобы эффективно иметь «WHERE CLAUSE» после GROUP BY

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

Что я ищу сделать, это получить все строки, сгруппированных по наименованиям, где СТРАНА не содержит Америку.

псевдопользователей-SQL: SELECT * FROM GROUP пользователей по имени ГДЕ СТРАНА НЕ НРАВИТСЯ 'Америка' (очевидно, что это не работает, но это для осветления)

Выход из выше:

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

Можно ли это сделать, или я приближаюсь к этому неправильно?

EDIT: Я не уверен в том, как слово в заголовке, так что если кто-то есть лучшее предложение, пожалуйста, обновите его/дайте мне знать

ответ

2

Вы не должны использовать select * с group by. Может быть, вы хотите:

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

Или, если вы хотите name S, которые не в 'America':

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

В нижнем запросе большое спасибо! –

1

Следующий запрос должен работать.

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

ВЫБРАТЬ имя, страна от пользователей ГДЕ страна <> 'Америка' GROUP BY страны HAVING count (name) = 1

EDIT: Это мой первый пост переполнения стека, открытый для конструктивной обратной связи. Послушайте свои мысли.

Смежные вопросы