#mysql #select #rows
#mysql #выберите #строки
Вопрос:
Прежде всего, я прошу прощения, если этот вопрос задавался раньше, я действительно пытался искать, но не смог найти то, что искал.
Итак, это моя таблица. Я хочу иметь запрос, в котором я выбираю идентификаторы пользователей, которые имеют одинаковое точное значение более 2 раз.
| USER ID|COLOR|
---------|-------
| 1 | BLUE
| 2 | BLUE
| 3 | RED
| 4 | BLUE
Поэтому мой запрос в этом случае вернет
| USER ID|
|--------|
| 1 |
| 2 |
| 4 |
Большое вам спасибо!
Ответ №1:
Кажется, вы хотите выбрать строки, где color
повторяется более двух раз. Вот один из методов:
select t.*
from t join
(select color, count(*) as cnt
from t
group by color
) tt
on tt.color = t.color and cnt > 2;
Вы запросили более 2 совпадений. Для 2 или более совпадений вы должны использовать решение sgeddes:
select t.*
from t
where exists (select 1
from t tt
where t.color = tt.color and t.userid <> tt.userid
);
Или, если вам просто нужны несколько идентификаторов:
select color, group_concat(userid)
from t
group by color
having count(*) >= 2;
Комментарии:
1. Чтобы добавить, я буду искать в таблице с 140 тыс. строк. Я хочу получить идентификатор пользователя для людей, у которых точно такой же IP-адрес. Я собираюсь попробовать это сейчас, заранее спасибо.
Ответ №2:
Вот один из вариантов, использующий exists
:
select userid
from yourtable t
where exists (
select 1
from yourtable t2
where t.userid <> t2.userid and t.color = t2.color
)
Комментарии:
1. ОП запрашивал «более 2 раз», а не «2 или более раз».
2. @GordonLinoff — отличная точка зрения, я не осознавал этого при публикации. Ваш ответ будет обрабатывать> 2, это будет обрабатывать> 1. Предполагая, что OP хочет> 2, я удалю этот ответ…
3. . . ОП кажется запутанным.