【发布时间】:2018-01-15 22:12:54
【问题描述】:
有什么方法可以简单地展平下表,以便我可以将 (num*num_2) 乘以 mul,然后我可以通过 id 对组求和。 所以我真的在寻找类似于下面显示的第二张图片的表格。
【问题讨论】:
标签: google-bigquery
有什么方法可以简单地展平下表,以便我可以将 (num*num_2) 乘以 mul,然后我可以通过 id 对组求和。 所以我真的在寻找类似于下面显示的第二张图片的表格。
【问题讨论】:
标签: google-bigquery
以下几个选项(BigQuery 标准 SQL)
#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
SELECT 1 id, [STRUCT<num INT64, num_2 INT64>(2013, 2013),(1625, 1625),(1297, 1297),(7634, 7634)] nums UNION ALL
SELECT 2, [STRUCT<num INT64, num_2 INT64>(1,1),(2,2),(3,3),(4,4),(5,5)]
)
SELECT id, (SELECT SUM(num * num_2) FROM UNNEST(nums) nums ) as mul
FROM `yourproject.yourdataset.yourtable`
或
#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
SELECT 1 id, [STRUCT<num INT64, num_2 INT64>(2013, 2013),(1625, 1625),(1297, 1297),(7634, 7634)] nums UNION ALL
SELECT 2, [STRUCT<num INT64, num_2 INT64>(1,1),(2,2),(3,3),(4,4),(5,5)]
)
SELECT id, SUM(num * num_2) AS mul
FROM `yourproject.yourdataset.yourtable`, UNNEST(nums) nums
GROUP BY id
两者都返回下方
id mul
1 66652959
2 55
如果您不需要做 SUM(num * num_2) 而只是将表格展平 - 您可以使用下面的示例
#standardSQL
WITH `yourproject.yourdataset.yourtable` AS (
SELECT 1 id, [STRUCT<num INT64, num_2 INT64>(2013, 2013),(1625, 1625),(1297, 1297),(7634, 7634)] nums UNION ALL
SELECT 2, [STRUCT<num INT64, num_2 INT64>(1,1),(2,2),(3,3),(4,4),(5,5)]
)
SELECT id, num, num_2
FROM `yourproject.yourdataset.yourtable`, UNNEST(nums) nums
【讨论】: