sql >> Databasteknik >  >> RDS >> Mysql

Räkna frekvensen av varje ord

Den här lösningen verkar göra jobbet (stul nästan ordagrant från denna sida ). Det kräver en auxiliary tabell, fylld med sekventiella nummer från 1 till åtminstone det förväntade antalet distinkta ord. Detta är ganska viktigt för att kontrollera att hjälptabellen är tillräckligt stor, annars blir resultaten felaktiga (visar inget fel).

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

Detta tillvägagångssätt är så ineffektivt som man kan vara, eftersom det inte kan använda något index.

Som ett alternativ skulle jag använda en statistiktabell som jag skulle hålla uppdaterad med triggers. Initiera kanske statistiktabellen med ovanstående.



  1. Ska jag använda makron eller VBA-kod?

  2. Hur man konverterar från ett datumformat till ett annat i SQL Server med CONVERT()

  3. Enklaste sättet att kopiera en MySQL-databas?

  4. Utfasad:mysql_connect()