PostgreSQL подсчитывает частоту каждого ключевого слова в соответствии с ключевым словом

В основном я проверяю, содержит ли столбец какой-либо список ключевых слов в массиве

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

Это прекрасно работает, чтобы дать мне общее количество столбцов с этими ключевыми словами, но я также хочу подсчитать, сколько раз каждое из этих ключевых слов встречается. В идеале я бы закончил с

 Keyword   |   Count
---------------------
 bat       |     4
 cat       |    10

и так далее. Любые идеи? Спасибо!


person user47143    schedule 11.05.2016    source источник
comment
Вы должны создать таблицу со всеми вашими ключевыми словами, а затем соединить эту таблицу с большой, используя условие. После этого можно было агрегировать по словам.   -  person gr1zzly be4r    schedule 11.05.2016


Ответы (1)


Вам будет лучше использовать регулярные выражения для проверки полных слов в тексте:

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;

Замените ~* на ~, если вам нужен поиск с учетом регистра.

person Ezequiel Tolnay    schedule 12.05.2016