计算每个ID的字段的出现次数

时间:2016-10-03 14:27:36

标签: sql google-bigquery

考虑一个由两列组成的表:(#=)/2,如:

device_id, connection_type

对于每个设备,我想获得字段device_id | connection_types -----------|------------------ 111 | wifi 111 | LTE 222 | wifi 111 | LTE 111 | LTE 111 | cable .... 的值以及它们的出现次数。例如,输出的两行将如下所示:

connection_type

表示设备111连接3行wifi, 5中的LTE和出现2行的电缆。 如何使用Google BigQuery中的SQL(使用其旧SQL或标准SQL方言)来计算这一点。

值得指出的是(同样由@kbball建议)device_id | connection_types | connection_count -----------|------------------|------------------- 111 | wifi | 3 | LTE | 5 | cable | 2 -----------|------------------|------------------- 222 | wifi | 4 | cable | 6 device_id的分组做了类似的事情,但我无法将该输出转换为我在上面提供的示例答案。< / p>

我考虑过使用connection_typenest(),但没有一个可以使用。我无法同时在array_agg()nest()列上同时使用connection_types。并且因为某些设备没有数据,connection_count 导致错误(其输出不能为空)。

2 个答案:

答案 0 :(得分:2)

您可以尝试这样,但设备ID将重复每行:

{{1}}

答案 1 :(得分:1)

如果要为每个设备id获取一个(connection_types,connection_count)对的数组,标准SQL中的以下查询将执行此操作:

SELECT device_id, ARRAY_AGG(STRUCT(connection_types, connection_count)) FROM (
SELECT device_id, connection_types, COUNT(*) connection_count
FROM t
GROUP BY device_id, connection_types) 
GROUP BY device_id