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

标签 mysql select count

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

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 |

如果我要计算 tweeter_user_1 的主题标签,我期望的结果是 8,如果我想要 tweeter_user_3 的主题标签,它应该返回 1。假设我的表名称是 tweets,我该怎么做。

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

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

最佳答案

这应该会为您提供屏幕名称列表以及他们使用的所有主题标签的总数。

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

但是......如果表很大,这是一个讨厌的查询。如果您只需要单个用户的计数,我可能会在内部选择中指定特定用户。像这样:

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

关于mysql - 计算 MySQL 列中子字符串的出现次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12736459/

相关文章:

r - 计算 R 中拼错的单词

sql - 在 SQL 中匹配相似的城市名称

mysql - 如何从 SELECT 子查询中获取多个列?

javascript - 如何将添加到列表框客户端的值存储到 sessionScope

mysql - 更复杂查询中的 COUNT() 和 SELECT

MySQL,过滤但计数不同的值

php - 个人资料页面 - URL 参数

mysql - innodb恢复后如何重启mysql

mysql - 选择条件 1 在条件 2 之后的记录

php - JQUERY自动完成获取id而不是值