Mysql
 sql >> Base de données >  >> RDS >> Mysql

Compter la fréquence de chaque mot

Cette solution semble faire le travail (volée presque textuellement de cette page ). Il nécessite un auxiliary tableau, rempli de nombres séquentiels de 1 au moins au nombre attendu de mots distincts. Ceci est très important pour vérifier que la table auxiliaire est suffisamment grande, sinon les résultats seront erronés (ne montrant aucune erreur).

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 Fiddle

Cette approche est aussi inefficace que possible, car elle ne peut utiliser aucun index.

Comme alternative, j'utiliserais un tableau de statistiques que je tiendrais à jour avec les déclencheurs. Peut-être initialiser le tableau des statistiques avec ce qui précède.