Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Zählen Sie die Häufigkeit jedes Wortes

Diese Lösung scheint zu funktionieren (fast wörtlich von dieser Seite gestohlen). ). Es erfordert eine auxiliary Tabelle, gefüllt mit fortlaufenden Nummern von 1 bis mindestens zur erwarteten Anzahl unterschiedlicher Wörter. Dies ist sehr wichtig, um zu überprüfen, ob die Hilfstabelle groß genug ist oder die Ergebnisse falsch sind (keine Fehler anzeigen).

SELECT
    SUBSTRING_INDEX(SUBSTRING_INDEX(maintable.comment, ' ', auxiliary.id), ' ', -1) AS word,
    COUNT(*) AS frequency
FROM maintable 
JOIN auxiliary ON
    LENGTH(comment)>0 AND SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id), ' ', -1)
    <> SUBSTRING_INDEX(SUBSTRING_INDEX(comment, ' ', auxiliary.id-1), ' ', -1)
GROUP BY word
HAVING word <> ' '
ORDER BY frequency DESC;

SQL-Geige

Dieser Ansatz ist äußerst ineffizient, da er keinen Index verwenden kann.

Als Alternative würde ich eine Statistiktabelle verwenden, die ich mit Triggern auf dem Laufenden halten würde. Initialisieren Sie vielleicht die Statistiktabelle mit dem obigen.