标准SQL-列中的总和数组

时间:2019-02-25 11:35:22

标签: google-bigquery standard-sql

我有一个有关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是否可以实现这一目标,如果可以,怎么办?

如果您能给我看示例代码,那将是很棒的。预先感谢。

1 个答案:

答案 0 :(得分:1)

这应该有效:

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

它首先根据索引对数组元素求和,然后使用原始元素顺序将其重新聚合为数组。