计算MySQL列中子字符串的出现次数

Tal*_*les 5 mysql select count

我有一个表格,可以存储很多Twitter推文的信息,包括推文文本和发推文推文的用户的屏幕名称.推文包含主题标签(以#开头),我想计算特定用户推文的主题标签数量:

tweet_id |                       tweet_text                           | screen_name    |
--------------------------------------------------------------------------------------------
       1 | #hashtag1 #otherhashtag2 #hashtag3 some more text          | tweeter_user_1 |
       2 | some text #hashtag1 #hashtag4 more text                    | tweeter_user_2 |
       3 | #hashtag5 #hashtag1 @not a hashtag some#nothashtag         | tweeter_user_1 |
       4 | #hashtag1 with more text                                   | tweeter_user_3 |
       5 | #otherhashtag2 #hashtag3,#hashtag4 more text               | tweeter_user_1 |
Run Code Online (Sandbox Code Playgroud)

如果我要计算tweeter_user_1的主题标签,我期望的结果是8,如果我想要tweeter_user_3的主题标签它应该返回1.如果我的表名是推文我怎么能这样做.

我试过这个:SELECT COUNT( * ) FROM tweets WHERE( LENGTH( REPLACE( tweet_text, '#%', '@') = 0 ) ) AND screen_name = 'tweeter_user_1'但它没有用

如果tweeter_user_1的结果也是9,我会很高兴:D

Ray*_*Ray 8

这应该给你一个screen_names列表和他们使用的所有主题标签的总数.

SELECT  foo.screen_name, SUM(foo.counts) FROM 
  (
    SELECT screen_name, 
           LENGTH( tweet_text) - LENGTH(REPLACE(tweet_text, '#', '')) AS counts 
    FROM tweet_table 
  ) as foo 
GROUP BY  foo.screen_name
Run Code Online (Sandbox Code Playgroud)

但是......如果表格很大,这是一个令人讨厌的问题.如果您只需要单个用户的计数,我可以在内部选择中指定特定用户.像这样:

SELECT  foo.screen_name, SUM(foo.counts) FROM 
 (
    SELECT screen_name, 
         LENGTH( tweet_text) - LENGTH(REPLACE(tweet_text, '#', '')) AS counts 
    FROM tweet_table WHERE  screen_name = 'tweeter_user_1' 
 ) as foo 
GROUP BY  foo.screen_name
Run Code Online (Sandbox Code Playgroud)