MySQL-Zählvorkommen größer als 2

91

Ich habe die folgende Tabellenstruktur

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

Die Tabelle wird mit den Wörtern im unteren Fall eines bestimmten Textes gefüllt, also mit dem Text

Hallo tschüss hallo

würde dazu führen

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

Ich möchte eine SELECT-Abfrage erstellen, die die Anzahl der Wörter zurückgibt, die mindestens zweimal in der Tabelle wiederholt werden (wie Hallo).

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

Das ist natürlich so falsch und super überladen, wenn der Tisch groß ist. Irgendeine Idee, wie man einen solchen Zweck erreicht? In dem oben angegebenen Beispiel würde ich 1 erwarten

Fabjoa
quelle
Hat sonst noch jemand die Unterstriche wie eine "schlaffe" Seilbrücke gesehen?
Tröpfchen

Antworten:

227

Verwenden Sie eine Kombination aus GROUP BY und HAVING, um eine Liste der Wörter zu erhalten, die mehrmals vorkommen, zusammen mit der Häufigkeit ihres Auftretens:

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

Um die Anzahl der Wörter in der obigen Ergebnismenge zu ermitteln, verwenden Sie diese als Unterabfrage und zählen Sie die Zeilen in einer äußeren Abfrage:

SELECT COUNT(*)
FROM
(
    SELECT NULL
    FROM words
    GROUP BY word
    HAVING COUNT(*) > 1
) T1
Mark Byers
quelle
1
Nur ein Addon, Sie können den Alias ​​auch in "Haben" verwenden. Wie SELECT Wörter, COUNT (*) AS cnt FROM Wörter GROUP BY Wort mit cnt> 1
Vaibhav Jain
17
SELECT count(word) as count 
FROM words 
GROUP BY word
HAVING count >= 2;
bot403
quelle
CodeIgniter unterstützt auch das Haben, also war dies perfekt. Danke
Won Jun Bae
6

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

a1ex07
quelle