Liczba wystąpień MySQL jest większa niż 2

93

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

fabjoa
źródło
Czy ktoś jeszcze widzi znaki podkreślenia jak „zapadnięty” most linowy?
kropla

Odpowiedzi:

232

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
Mark Byers
źródło
1
Tylko dodatek, możesz użyć aliasu również w „posiadaniu”. Podobnie jak SELECT words, COUNT (*) AS cnt FROM words GROUP BY word HAVING cnt> 1
Vaibhav Jain
18
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;
bot403
źródło
CodeIgniter obsługuje również posiadanie, więc to było idealne. Dzięki
wygrał Jun Bae
6

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

a1ex07
źródło