检索推文中提到的每个主题标签的出现次数

问题描述 投票:0回答:1

我的 PieCloudDB 数据库中有一个 tweets 表。假设我有以下示例数据:

用户 ID tweet_id 推文日期 推文
128 6 2024-02-01 #生活充满惊喜。
133 9 2024-02-01 我对自己的成就#感到高兴。
146 13 2024-02-04 NoSQL 与 SQL。 #数据库#技术
150 14 2024-02-05 晴朗的天气让大家#开心!
155 18 2024-02-07 #PieCloudDB 是云原生#数据库。
156 19 2024-02-10 #快乐的人散发着正能量。 #乐观
168 30 2024-03-02 多么美好的#生活啊!

我现在想要计算主题标签在二月份中出现在推文中的次数,并按计数降序主题标签名称升序( 请注意,每条推文可能有多个主题标签)。对于上面的示例数据,我希望得到以下结果:

标签hashtag_count#快乐3#数据库2#生活1#乐观1#PieCloudDB1#科技1
我尝试了以下查询:

SELECT hashtag, COUNT(*) AS hashtag_count FROM ( SELECT tweet_id, UNNEST(STRING_TO_ARRAY(SUBSTRING(tweet, POSITION('#' IN tweet)), ' ')) AS hashtag FROM tweets WHERE tweet_date >= '2024-02-01' AND tweet_date < '2024-03-01' ) AS subquery WHERE hashtag LIKE '#%' GROUP BY hashtag ORDER BY hashtag_count DESC, hashtag ASC
但是我发现了一个问题。出现在末尾的主题标签将计算标点符号,例如 

.

!
 :

标签hashtag_count#快乐2#数据库1#数据库。1#快乐!1#生活1#乐观1#PieCloudDB1#科技1
有什么办法可以避免这个问题吗?

sql string hashtag
1个回答
0
投票
你可以尝试使用

regular expressions

来解决这个问题。(我不太确定这是否适用于PieCloudDB),我刚刚在PostgreSQL中测试了它。

SELECT unnest(regexp_matches(tweet, '#\w+', 'g')) AS hashtag, COUNT(*) AS hashtag_count FROM tweets WHERE tweet_date >= '2024-02-01' AND tweet_date < '2024-03-01' GROUP BY hashtag ORDER BY hashtag_count DESC, hashtag ASC
    
© www.soinside.com 2019 - 2024. All rights reserved.