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


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

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;

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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.