sql - 如何计算表列GoogleSQL Bigquery中单词的频率
问题描述
例如,我有一个表格中的一列,其中包含某些单词。
MyTable
Name device_Used
----- ----------------
a iphone, Ipad, laptop
b mobile, laptop, android, desktop
c android, desktop, washing machine
现在我想从该表中搜索一组单词,例如 [Ipad,android,laptop] 并计算其频率。
我尝试通过阅读一些在线解决方案并为自己创建一个解决方案来做到这一点,但出现了错误。这是我尝试过的。
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;
我想创建一个这样的新表结果:-
device_Used count
--------------- -----------
Ipad 1
android 2
laptop 2
desktop 2
由于我是新手,因此您可以建议一个新代码,因为我正在使用的代码是通过阅读在线建议来操作的。
解决方案
以下是 BigQuery 标准 SQL
#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')
如果适用于您的问题中的示例数据,如下例所示
#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')
结果是
Row device_Used count
1 ipad 1
2 laptop 2
3 android 2
如果您可以提供评论,那一行将有很大帮助
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)
- 从表中选择
- 将逗号分隔的列表转换为数组并取消嵌套
- 按未嵌套数组的元素分组
- 删除尾随空格和小写以解决区分大小写的问题
- 将这些设备留在预定义列表中的输出中
推荐阅读
- javascript - 如何在浏览器/标签关闭时发送 API 请求?
- reactjs - React Bootstrap Table KeyField 与两个主键
- c - 使用 malloc 为 C 指针赋值,无需变量初始化
- sql - 如何计算雅典娜表中每列的空值百分比
- android - 在调试器工具窗口中看不到协程选项卡
- complexity-theory - 我们可以说 2x+1 = o(-5x^2+2)
- python - 使用 datatable 读取大尺寸 csv 文件的错误信息
- arrays - Powershell 从 CSV 文件中的所有列构建所有可能组合的数组
- jquery - JQuery 在点击时加载更多帖子
- c++ - 错误:C2661:'std::array
::array':没有重载函数需要 3 个参数