Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Conte a frequência de cada palavra


Esta solução parece fazer o trabalho (roubada quase literalmente de esta página ). Requer um auxiliary tabela, preenchida com números sequenciais de 1 a pelo menos o número esperado de palavras distintas. Isso é muito importante para verificar se a tabela auxiliar é grande o suficiente, ou os resultados estarão errados (não mostrando nenhum erro).
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

Essa abordagem é tão ineficiente quanto possível, porque não pode usar nenhum índice.

Como alternativa, usaria uma tabela de estatísticas que manteria atualizada com os gatilhos. Talvez inicialize a tabela de estatísticas com o acima.