sql >> Database >  >> RDS >> Mysql

Tel de frequentie van elk woord

Deze oplossing lijkt het werk te doen (bijna letterlijk gestolen van deze pagina ). Het vereist een auxiliary tabel, gevuld met volgnummers van 1 tot ten minste het verwachte aantal verschillende woorden. Dit is heel belangrijk om te controleren of de hulptabel groot genoeg is, anders zullen de resultaten verkeerd zijn (geen fouten).

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

Deze aanpak is zo inefficiënt als maar kan, omdat het geen enkele index kan gebruiken.

Als alternatief zou ik een statistiektabel gebruiken die ik up-to-date zou houden met triggers. Initialiseer misschien de statistiekentabel met het bovenstaande.



  1. Bewaar procedures in phpMyAdmin

  2. PHP 7 RC3:Hoe een ontbrekende MySQL PDO te installeren

  3. Functie-geretourneerde record splitsen in meerdere kolommen

  4. Met Docker krijg ik de foutmelding:SQLSTATE [HY000] [2002] No such file or directory