У меня следующая структура таблицы
+ id + word +
+------+--------+
Таблица заполняется словами в нижнем регистре данного текста, поэтому текст
Привет пока привет
приведет к
+ id + word +
+------+--------+
+ 1 + hello +
+------+--------+
+ 2 + bye +
+------+--------+
+ 3 + hello +
+------+--------+
Я хочу сделать запрос SELECT, который вернет количество слов, которые повторяются как минимум два раза в таблице (например, привет)
SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))>1
что, конечно, так неправильно и супер перегрузка, когда таблица большая. Есть идеи, как достичь такой цели? В приведенном выше примере я ожидал бы 1
Ответы:
Чтобы получить список слов, которые встречаются более одного раза вместе с тем, как часто они встречаются, используйте комбинацию 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
источник
SELECT count(word) as count FROM words GROUP BY word HAVING count >= 2;
источник
SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) > 1
источник