sql >> Database teknologi >  >> RDS >> Mysql

Tæl hyppigheden af ​​hvert ord

Denne løsning ser ud til at gøre jobbet (stjålet næsten ordret fra denne side ). Det kræver en auxiliary tabel, fyldt med fortløbende tal fra 1 til mindst det forventede antal distinkte ord. Dette er ret vigtigt at kontrollere, at hjælpetabellen er stor nok, ellers vil resultaterne være forkerte (der ikke viser nogen fejl).

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 violin

Denne tilgang er så ineffektiv, som man kan være, fordi den ikke kan bruge noget indeks.

Som et alternativ ville jeg bruge en statistiktabel, som jeg ville holde ajour med udløsere. Initialiser måske statistiktabellen med ovenstående.



  1. PostgreSQL belastningsbalancering i skyen gjort let

  2. Nedetid for AWS RDS-instansopgradering

  3. FEJL 2002 (HY000):Kan ikke oprette forbindelse til den lokale MySQL-server via socket '/var/run/mysqld/mysqld.sock' (2)

  4. InnoDB:Operativsystemfejl nummer 23 i en filhandling