sql >> データベース >  >> RDS >> Mysql

各単語の頻度を数える

    このソリューションはその役目を果たしているようです(このページ からほぼ逐語的に盗まれました )。 auxiliaryが必要です テーブル。1から少なくとも予想される個別の単語の数までの連続番号で埋められます。これは、補助テーブルが十分に大きいことを確認するために非常に重要です。そうしないと、結果が間違ってしまいます(エラーは表示されません)。

    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フィドル

    このアプローチは、インデックスを使用できないため、可能な限り非効率的です。

    別の方法として、トリガーで最新の状態に保つ統計テーブルを使用します。おそらく、上記で統計テーブルを初期化します。



    1. Node.jsでSequelizeを使用して結合クエリを作成する方法

    2. Entity Framework + MySQL-なぜパフォーマンスがそれほどひどいのですか?

    3. SQL Serverで外部キーの依存関係を見つける方法は?

    4. DateTimeのドロップタイム