3

在我的数据库中,有一个表,名称为 tableA。这里给出了表的结构

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 是 auto-increment.from 列表示哪个用户正在发送消息,并且 message 列由 messages 组成。我想知道哪些用户发送了多少单词。所以我必须先计算行中的单词然后我必须搜索整个列并找到重复的位置并为该特定用户添加单词。在我的示例中你可以看到 23 和 74 的两个地方来了。我希望我的输出为

    from       nos
    23         10
    65         4 
    74         12

在这里你可以看到 23 分两行出现,所以我添加了两行的单词数,比如 74 也分两行出现。请指导

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 回答