3

私のデータベースには、tableAという名前のテーブルが1つあります。テーブルの構造はここに示されています

id      from     message
1       23       hi how are you
2       65       hey whats going on
3       74       enjoying the vacation with family
4       23       here in Australia its chilly season
5       74       hey sam whats the plan for tomorrow

id is auto-increment.from 列は、メッセージを送信しているユーザーを示し、メッセージ列はメッセージで構成されています。どのユーザーがどれだけの単語を送信したかを知りたいので、最初に行から単語を数えてから、列全体を検索し、繰り返しがある場所を見つけて、その特定のユーザーの単語を追加する必要があります。私の例では、次のことができます23 と 74 から 2 つの場所が来ていることを確認します。私は私の出力が欲しい

    from       nos
    23         10
    65         4 
    74         12

ここでは、23 が 2 行で表示されていることがわかります。そのため、74 も 2 行で表示されるように、2 行の単語の数を追加しました。ガイドしてください

4

3 に答える 3

10

このクエリで単語を数えることができます-

Select length('string')-length(replace('string',' ',''))+1;

あなたのテーブルでは、次のようにすることができます

Select *,(length(message)-length(replace(message,' ',''))+1) from table_name

これにより、その前にあるすべてのメッセージの単語数が表示されます。

希望する結果を得るには、これを試してください-

Select `from`, sum((length(message)-length(replace(message,' ',''))+1)) as nos from table_name group by `from`
于 2012-04-16T13:29:26.170 に答える
2

単語が単一のスペースで区切られていると仮定すると、次を使用できます。

SUM( LENGTH(message) - LENGTH(REPLACE(message, ' ', ''))+1)

単語数を取得します。各ユーザーからのすべてのメッセージを合計したいので、(列から) ユーザーごとにグループ化する必要があります。最後に次のようなものが必要です。

select `from`, SUM( LENGTH(message) - LENGTH(REPLACE(message, ' ', ''))+1) as nos
from tableA
group by `from`
于 2012-04-16T13:37:26.613 に答える
0
SELECT from, SUM(LENGTH(message) - LENGTH(REPLACE(TRIM(message), ' ', ''))+1) FROM my_table GROUP BY from;
于 2012-04-16T14:00:33.880 に答える