Мне было интересно, можно ли выбрать все уникальные строки (выполнив группу по имени столбца), где другой столбец не содержит определенных значений. НАПРИМЕР:
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 |
+-------+-----------+
Можно ли это сделать или я неправильно подхожу к этому?
ИЗМЕНИТЬ : я не знаю, как написать заголовок, поэтому, если у кого-то есть предложение получше, обновите его / дайте мне знать
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;
Следующий запрос должен работать.
SELECT DISTINCT name, country FROM table WHERE country != 'America'
ВЫБЕРИТЕ имя, страну ОТ пользователей ГДЕ страна <> 'Америка' ГРУППА ПО СТРАНЕ ИМЕЕТ количество (имя) = 1
РЕДАКТИРОВАТЬ: это мой первый пост о переполнении стека, открытый для конструктивных отзывов. С нетерпением жду ваших мыслей.
Похожие вопросы
Новые вопросы
mysql
MySQL — это бесплатная система управления реляционными базами данных (RDBMS) с открытым исходным кодом, которая использует язык структурированных запросов (SQL). НЕ ИСПОЛЬЗУЙТЕ этот тег для других БД, таких как SQL Server, SQLite и т. д. Это разные БД, которые используют свои собственные диалекты SQL для управления данными. В вопросе всегда указывайте точную версию сервера. Версии 5.x сильно отличаются по своим возможностям от версий 8+.