我的 Postgresql 数据库中有一个名为Description
包含文本的列。出于某些分析目的,我想查找该描述中的单词总数(以空格分隔)(所有单词和唯一单词),并在 columnsword_count
和中设置这些计数unique_word_count
。例如。
ID | 描述 |
---|---|
1 | 美好的一天 |
2 | 这是一个产品。它是有益的 |
我想要有以下输出:
ID | 字数 | 唯一字数 | 描述 |
---|---|---|---|
1 | 4 | 4 | 美好的一天 |
2 | 7 | 6 | 这是一个产品。它是有益的 |
for是 6 unique_word_count
,id = 2
因为这个词is
已经重复了 2 次。
我对我的回答不是 100% 满意,因此我在这里为我自己关于这个主题的问题授予了奖金。
Erwin Brandstetter(像往常一样)提供了一个崇高的答案- 请使用它而不是我在下面写的内容 - 除非你的用例非常简单,即使如此......
=================================================== ===========
为了解决您的问题,我做了以下操作:
CREATE TABLE wordcount (id SERIAL NOT NULL PRIMARY KEY, description TEXT NOT NULL);
Run Code Online (Sandbox Code Playgroud)
填充它:
INSERT INTO wordcount (description) VALUES ('What a great day');
INSERT INTO wordcount (description) VALUES ('This is a product. It is useful');
Run Code Online (Sandbox Code Playgroud)
然后执行以下查询(此处提供小提琴):
WITH arranged AS
(
SELECT id,
UNNEST
(
STRING_TO_ARRAY
(
REGEXP_REPLACE(description, '[^\w\s]', '', 'g'), ' '
)
) AS word,
description
FROM wordcount
)
SELECT a.id, COUNT(a.word), COUNT(DISTINCT(a.word)), a.description
FROM arranged a
GROUP BY a.id, a.description;
Run Code Online (Sandbox Code Playgroud)
结果:
ID | 字数 | 唯一字数计数 | 描述 |
---|---|---|---|
1 | 4 | 4 | 美好的一天 |
2 | 7 | 6 | 这是一个产品。它是有益的 |
如果你对这一切都不熟悉,我建议你浏览一下这里的小提琴,它显示了我的思维过程的发展,导致了上面的查询。
我建议您将此逻辑放入 onInsert/onUpdate 触发器中 - 它可能相当计算密集。
归档时间: |
|
查看次数: |
8977 次 |
最近记录: |