首页 > 解决方案 > 总结时间范围内的字数

问题描述

我有下表,它存储了响应文本和与之关联的关键字搜索。

创建表 nlp.search(response string, words string,inquiry_time timestamp);

insert into nlp.search values('如何重置密码','重置word密码',TIMESTAMP("2021-09-19 05:30:00+00")); 插入 nlp.search values('如何重置密码','重置密码',TIMESTAMP ("2021-09-20 07:30:00+00")); 插入 nlp.search values('如何重置密码','密码',TIMESTAMP ("2021-09-16 08:30:00+00")); 插入 nlp.search values('如何重置密码','reset',TIMESTAMP ("2021-09-14 08:30:00+00"));

我想以这种格式的响应提供一个摘要报告以及与之关联的每个单词的计数。

response individual_word_count
如何重设密码 reset(3) word(1) password(2) passphrase(1)

还可以传递时间戳列inquiry_time 以缩小日期范围,并且必须相应地计算汇总值

例如,时间范围过滤器 2021-09-19 到 2021-09-20

response individual_word_count
如何重设密码 reset(2) word(1) password(1) passphrase(1)

这可以使用视图来完成吗?

标签: google-bigquerybigquery-udf

解决方案


下面使用

select response, word, count(1) ndividual_word_count
from `nlp.search`, 
unnest(split(words, ' ')) word
where date(inquiry_time) between '2021-09-19' and '2021-09-20'
group by response, word       

如果应用于您问题中的样本数据 - 输出是

在此处输入图像描述

我需要在 1 个单列中显示单词和计数

然后在下面使用

select response, 
  string_agg(format('%s (%i)', word, individual_word_count)) counts
from (
  select response, word, count(1) individual_word_count
  from `nlp.search`, 
  unnest(split(words, ' ')) word
  where date(inquiry_time) between '2021-09-19' and '2021-09-20'
  group by response, word
)
group by response

带输出

在此处输入图像描述


推荐阅读