考虑一个由两列组成的表:(#=)/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_type
或nest()
,但没有一个可以使用。我无法同时在array_agg()
和nest()
列上同时使用connection_types
。并且因为某些设备没有数据,connection_count
导致错误(其输出不能为空)。
答案 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