基本上我在检查一个列是否包含数组中的关键字列表

SELECT COUNT(*) FROM table WHERE value ILIKE ANY (ARRAY['%bat%', '%cat%', ...])

它可以很好地给出包含这些关键字的列的总数,但是我还想计算每个关键字被命中的次数。理想情况下我会
 Keyword   |   Count
---------------------
 bat       |     4
 cat       |    10

等等。有什么想法吗?谢谢!

最佳答案

最好使用正则表达式来测试文本中的完整单词:

with
  words(word) as (values ('bat', 'cat'))

select w.word, count(*)
from words w
join table t on (t.value ~* ('\m'||w.word||'\M'))
group by w.word;

如果需要区分大小写的搜索,请将~*替换为~

关于postgresql - PostgreSQL计算关键字匹配中每个关键字的频率,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37164440/

10-15 11:07