sql >> Databáze >  >> RDS >> Mysql

Spočítejte frekvenci každého slova

Zdá se, že toto řešení dělá svou práci (ukradeno téměř doslovně z této stránky ). Vyžaduje to auxiliary tabulka, vyplněná pořadovými čísly od 1 do alespoň očekávaného počtu odlišných slov. To je docela důležité pro kontrolu, zda je pomocná tabulka dostatečně velká, jinak budou výsledky chybné (nezobrazí žádnou chybu).

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

Tento přístup je tak neefektivní, jak jen může být, protože nemůže používat žádný index.

Jako alternativu bych použil statistickou tabulku, kterou bych průběžně aktualizoval o spouštěče. Možná inicializujte tabulku statistik pomocí výše uvedeného.



  1. Zkopírujte tabulku z jedné databáze do druhé v Postgresu

  2. Ukládání hesel pro MYSQL v aplikaci PHP bezpečným způsobem

  3. SQLAlchemy Reflection:Jak mohu dotazovat data z konkrétních sloupců?

  4. Jak se připojit k mysql z C# přes SSH