Mam następującą strukturę tabeli
+ id + word +
+------+--------+
Tabelka zostanie wypełniona słowami w dolnych literach danego tekstu, czyli tekstem
Cześć cześć cześć
spowoduje
+ id + word +
+------+--------+
+ 1 + hello +
+------+--------+
+ 2 + bye +
+------+--------+
+ 3 + hello +
+------+--------+
Chcę wykonać zapytanie SELECT, które zwróci liczbę słów, które zostaną powtórzone co najmniej dwa razy w tabeli (np. Cześć)
SELECT COUNT(id) FROM words WHERE (SELECT COUNT(words.word))>1
co oczywiście jest tak złe i super przeciążające, gdy stół jest duży. Masz pomysł, jak osiągnąć taki cel? W podanym powyżej przykładzie oczekiwałbym 1
Odpowiedzi:
Aby uzyskać listę słów, które pojawiają się więcej niż jeden raz, wraz z ich częstotliwością, użyj kombinacji GROUP BY i HAVING:
SELECT word, COUNT(*) AS cnt FROM words GROUP BY word HAVING cnt > 1
Aby znaleźć liczbę słów w powyższym zestawie wyników, użyj tego jako podzapytania i policz wiersze w zapytaniu zewnętrznym:
SELECT COUNT(*) FROM ( SELECT NULL FROM words GROUP BY word HAVING COUNT(*) > 1 ) T1
źródło
SELECT count(word) as count FROM words GROUP BY word HAVING count >= 2;
źródło
SELECT word, COUNT(*) FROM words GROUP by word HAVING COUNT(*) > 1
źródło