2016-05-11 15 views
2

基本的に私は正常に動作PostgreSQLのカウント周波数

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

は私の列の合計数を与えるために、アレイ内の列は、キーワードのリストのいずれかが含まれているかどうかをチェックしていますそれらのキーワードを使用しているが、それらのキーワードのそれぞれが何回ヒットしたかを数えたい。理想的には私は

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

などで終わるだろう。何か案は?ありがとう!

+0

すべてのキーワードを含むテーブルを作成し、条件を使用してそのテーブルを大きなものに結合する必要があります。その後、あなたは単語によって集計することができます。 –

答えて

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; 

~~*を交換してください。