首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何计算表列GoogleSQL Bigquery中单词的频率

问如何计算表列GoogleSQL Bigquery中单词的频率
EN

Stack Overflow用户
提问于 2020-05-07 15:49:49
回答 1查看 571关注 0票数 0

例如,我在表中有一个列,其中包含特定的单词。

代码语言:javascript
复制
MyTable

 Name    device_Used
-----  ----------------  
 a       iphone, Ipad, laptop
 b       mobile, laptop, android, desktop
 c       android, desktop, washing machine

现在我想从那张桌子上搜索一组单词,比如Ipad,android,笔记本电脑,并计算其频率。

我试着通过阅读一些在线解决方案并为自己创建一个解决方案来实现这一点,但却遇到了一些错误。这就是我尝试过的。

代码语言:javascript
复制
WITH words AS (
  SELECT word
  FROM UNNEST([Ipad,android,laptop,desktop]) word
),
listcolumn AS (
  SELECT device
  FROM UNNEST(MyTable.device_Used) device
)
SELECT device, COUNT(word) AS cnt
FROM listcolumn
JOIN words
ON (device <> "")
GROUP BY device
ORDER BY cnt DESC;

我想创建一个新的表结果如下:-

代码语言:javascript
复制
   device_Used      count
---------------   -----------
Ipad                1            
android             2
laptop              2
desktop             2

由于我是新手,您可以建议一个新代码,因为我正在使用的代码是通过阅读在线建议来操作的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-05-07 15:53:28

下面是用于BigQuery标准SQL的

代码语言:javascript
复制
#standardSQL
SELECT TRIM(LOWER(device_Used)) AS device_Used, COUNT(1) `count`
FROM `project.dataset.table`,
UNNEST(SPLIT(device_Used)) device_Used
GROUP BY device_Used
HAVING LOWER(device_Used) IN ('ipad','android','laptop')

如果要应用于问题中的样本数据,请参见下面的示例

代码语言:javascript
复制
#standardSQL
WITH `project.dataset.table` AS (
  SELECT 'a' Name, 'iphone, Ipad, laptop' device_Used UNION ALL
  SELECT 'b', 'mobile, laptop, android, desktop' UNION ALL
  SELECT 'c', 'android, desktop, washing machine' 
)
SELECT TRIM(LOWER(device_Used)) AS device_Used, COUNT(1) `count`
FROM `project.dataset.table`,
UNNEST(SPLIT(device_Used)) device_Used
GROUP BY device_Used
HAVING LOWER(device_Used) IN ('ipad','android','laptop')

结果是

代码语言:javascript
复制
Row device_Used count    
1   ipad        1    
2   laptop      2    
3   android     2     

如果你能提供注释什么行做什么对

有很大的帮助

代码语言:javascript
复制
SELECT TRIM(LOWER(device_Used)) AS device_Used, COUNT(1) `count` -- (4) 
FROM `project.dataset.table`, -- (1)
UNNEST(SPLIT(device_Used)) device_Used -- (2)  
GROUP BY device_Used -- (3) 
HAVING LOWER(device_Used) IN ('ipad','android','laptop') -- (5)    

  1. 从表
  2. 中选择,将逗号分隔的列表转换为数组,并根据非嵌套数组
  3. 的元素取消
  4. 组,删除尾随空格和小写,以解决大小写敏感性

<代码>H 115>仅在预定义列表H 216G 217中的输出设备

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61662095

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档