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