Мне было интересно, можно ли выбрать все уникальные строки (выполнив группу по имени столбца), где другой столбец не содержит определенных значений. НАПРИМЕР:

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

Я хочу сгруппировать все строки по ИМЕНИ, где СТРАНА не содержит Америку.

PSUEDO-SQL : SELECT * FROM users GROUP BY Name WHERE COUNTRY NOT LIKE 'America' (очевидно, это не работает, но для пояснения)

Выход сверху:

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

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

ИЗМЕНИТЬ : я не знаю, как написать заголовок, поэтому, если у кого-то есть предложение получше, обновите его / дайте мне знать

1
Aaron McKelvie 23 Дек 2014 в 05:37

3 ответа

Лучший ответ

Вы не должны использовать 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;
2
Gordon Linoff 23 Дек 2014 в 02:47

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

SELECT DISTINCT name, country FROM table WHERE country != 'America'
1
kuriouscoder 23 Дек 2014 в 02:44

ВЫБЕРИТЕ имя, страну ОТ пользователей ГДЕ страна <> 'Америка' ГРУППА ПО СТРАНЕ ИМЕЕТ количество (имя) = 1

РЕДАКТИРОВАТЬ: это мой первый пост о переполнении стека, открытый для конструктивных отзывов. С нетерпением жду ваших мыслей.

1
Sam Ferguson 23 Дек 2014 в 08:59