MySQL количество вхождений больше 2

93

У меня следующая структура таблицы

+  id  +  word  +
+------+--------+

Таблица заполняется словами в нижнем регистре данного текста, поэтому текст

Привет пока привет

приведет к

+  id  +  word  +
+------+--------+
+   1  + hello  +
+------+--------+
+   2  + bye    +
+------+--------+
+   3  + hello  +
+------+--------+

Я хочу сделать запрос SELECT, который вернет количество слов, которые повторяются как минимум два раза в таблице (например, привет)

SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))>1

что, конечно, так неправильно и супер перегрузка, когда таблица большая. Есть идеи, как достичь такой цели? В приведенном выше примере я ожидал бы 1

фабхоа
источник
Кто-нибудь еще видел подчеркивание как «провисший» веревочный мост?
капля

Ответы:

232

Чтобы получить список слов, которые встречаются более одного раза вместе с тем, как часто они встречаются, используйте комбинацию GROUP BY и HAVING:

SELECT word, COUNT(*) AS cnt
FROM words
GROUP BY word
HAVING cnt > 1

Чтобы найти количество слов в приведенном выше наборе результатов, используйте его как подзапрос и подсчитайте строки во внешнем запросе:

SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) > 1
) T1
Марк Байерс
источник
1
Просто дополнение, вы также можете использовать псевдоним в слове «имеющий». Как и в случае SELECT слов, COUNT (*) AS cnt FROM слов GROUP BY word HAVING cnt> 1
Вайбхав Джайн
18
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;
bot403
источник
CodeIgniter также поддерживает наличие, так что это было идеально. Спасибо
Вон Чжун Бэ
6

SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) > 1

a1ex07
источник