标准 SQL - 对列中的数组求和
Standard SQL - Sum arrays in a column
我对 BigQuery(使用标准 SQL)有疑问。
假设我有以下数据:
Id Arrays
1 [1, 4]
2 [2]
1 [3, 4, 6, 91]
2 [0, 9, 1, 4, 0, 37]
我想将数组求和为以下输出:
Id Arrays
1 [4, 8, 6, 91]
2 [2, 9, 1, 4, 0, 37]
每个数组中的元素数量可以不同。求和结果的顺序很重要。
我考虑过标准 SQL 中的用户定义函数,但失败了。
谁能告诉我这是否可以通过使用标准 SQL 来实现,如果可以,如何实现?
如果你能给我一个示例代码就太好了。提前致谢。
这应该有效:
SELECT
id, ARRAY_AGG(x ORDER BY idx) AS arrays
FROM (
SELECT id, idx, SUM(x) AS x
FROM table,
UNNEST(arrays) AS x WITH OFFSET idx
GROUP BY id, idx
)
GROUP BY id
它首先根据索引对数组元素进行求和,然后使用原始元素顺序重新聚合成数组。
我对 BigQuery(使用标准 SQL)有疑问。
假设我有以下数据:
Id Arrays
1 [1, 4]
2 [2]
1 [3, 4, 6, 91]
2 [0, 9, 1, 4, 0, 37]
我想将数组求和为以下输出:
Id Arrays
1 [4, 8, 6, 91]
2 [2, 9, 1, 4, 0, 37]
每个数组中的元素数量可以不同。求和结果的顺序很重要。
我考虑过标准 SQL 中的用户定义函数,但失败了。
谁能告诉我这是否可以通过使用标准 SQL 来实现,如果可以,如何实现?
如果你能给我一个示例代码就太好了。提前致谢。
这应该有效:
SELECT
id, ARRAY_AGG(x ORDER BY idx) AS arrays
FROM (
SELECT id, idx, SUM(x) AS x
FROM table,
UNNEST(arrays) AS x WITH OFFSET idx
GROUP BY id, idx
)
GROUP BY id
它首先根据索引对数组元素进行求和,然后使用原始元素顺序重新聚合成数组。