あなたが探しているすべての単語が含まれるように派生テーブルを使用して、マッチをカウントする集約を使用することができます。
SELECT w.keyword, COUNT(s.Text)
From (SELECT 'facebook' as keyword UNION ALL
SELECT 'cnn'
) w LEFT JOIN
Data.Set_1 s
ON s.Text CONTAINS w.keyword
GROUP BY w.keyword;
注意してください:これは特に効率的ではありません。パフォーマンスは、キーワードの数がほぼ線形である必要があります。 BigQueryの標準SQLの場合
SELECT
keyword,
COUNT(1) AS rows,
SUM(INTEGER((LENGTH(Text) - LENGTH(REPLACE(Text, keyword, '')))/LENGTH(keyword))) AS occurences
FROM (
SELECT Text FROM
(SELECT 'facebookfacebookcnnbbccnn' AS Text),
(SELECT 'facebook' AS Text),
(SELECT 'cnn' AS Text)
) AS words
CROSS JOIN (
SELECT keyword FROM
(SELECT 'facebook' AS keyword),
(SELECT 'cnn' AS keyword),
(SELECT 'bbc' AS keyword)
) AS keywords
WHERE Text CONTAINS keyword
GROUP BY keyword
と遊ぶのがBigQueryのレガシーSQL
SELECT
keyword,
COUNT(1) AS rows,
SUM(INTEGER((LENGTH(Text) - LENGTH(REPLACE(Text, keyword, '')))/LENGTH(keyword))) AS occurences
FROM YourTable
CROSS JOIN keywords
WHERE Text CONTAINS keyword
GROUP BY keyword
例について
"テキストLIKE CONCAT( '%'、キーワード、 '%')は危険です。キーワードにはエスケープする必要のある特殊文字が含まれる可能性があるためです。それはあまり効果がありません。ここで使うより良い機能は "STRPOS(テキスト、キーワード)> 0" –
が更新されました! –
これは完全に機能します!ありがとうミハイル。さらに、このクエリでキーワードの2つの列をスキャンする方法はありますか?たとえば、列A:テキスト、列B:テキスト2 –