sql >> Base de Datos >  >> RDS >> Mysql

Contar la frecuencia de cada palabra

Esta solución parece hacer el trabajo (robada casi literalmente de esta página ). Requiere un auxiliary tabla, llena de números secuenciales desde 1 hasta al menos el número esperado de palabras distintas. Esto es muy importante para verificar que la tabla auxiliar sea lo suficientemente grande, o los resultados serán incorrectos (no mostrarán ningún error).

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

Este enfoque es tan ineficiente como uno puede ser, porque no puede usar ningún índice.

Como alternativa, usaría una tabla de estadísticas que mantendría actualizada con disparadores. Tal vez inicialice la tabla de estadísticas con lo anterior.