#sql
Вопрос:
У меня есть проект, в котором цель для имен пользователей-посетить все 5 мест в городе. Есть несколько городов. Они также могут посещать одно место в городе несколько раз (отсюда одинаковые строки).
У меня есть таблица, где в одном столбце указано имя пользователя, а в другом-местоположение, которое они посетили:
Имя пользователя | Город |
---|---|
Есиул | Чикаго 1 |
Есиул | Чикаго 2 |
Есиул | Чикаго 1 |
Есиул | Чикаго 3 |
Есиул | Чикаго 5 |
Другой | Чикаго 5 |
Есиул | Чикаго 4 |
Есиул | Чикаго 1 |
Есиул | Атланта 1 |
Есиул | Атланта 3 |
Есиул | Атланта 2 |
Другой | Атланта 2 |
Другой | Атланта 1 |
Другой | Атланта 1 |
Другой | Атланта 3 |
Другой | Атланта 5 |
Другой | Атланта 4 |
Я хотел бы вывести список имен пользователей, которые посетили все пять разных точек в определенном городе (я получаю город из $_GET[«город»]).
Я изучаю SQL, борюсь с этим запросом и был бы очень признателен, если бы кто-нибудь мог направить меня в правильном направлении.
Большое вам спасибо!
Ответ №1:
Вы используете WHERE
фильтр для нужного вам города. Затем вы используете агрегацию и фильтрацию с помощью count(distinct)
. Учитывая данные, которые вы показали:
select username
from t
where city like 'Chicago %'
group by username
having count(distinct city) = 5;
Я бы предупредил, что city
колонка на самом деле не «город», а «местоположение». Исходя из вопроса, я бы ожидал, что в таблице будет по крайней мере три столбца:
- Какой-то идентификатор пользователя
- Город (например,
'Chicago'
и'Atlanta'
) - Расположение
Ответ №2:
Это именно то, что я искал! Большое вам спасибо!
О, и там есть две колонки. У одного есть местоположение (город номер), а другой предназначен для имен пользователей.
Еще раз спасибо!