我希望计算Google Big Query中各列的累计总和。
假设有五列(NAME,A,B,C,D)
,其中包含两行整数,例如:
NAME | A | B | C | D
----------------------
Bob | 1 | 2 | 3 | 4
Carl | 5 | 6 | 7 | 8
我正在寻找一个窗口函数或UDF来计算跨行的累积和来生成此输出:
NAME | A | B | C | D
-------------------------
Bob | 1 | 3 | 6 | 10
Carl | 5 | 11 | 18 | 27
非常感谢任何想法或建议!
答案 0 :(得分:1)
我认为,对于您的要求,有许多合理的解决方法,主要是在设计更好的表格方面。所有这些都取决于您输入数据的方式,最重要的是取决于您的数据输入方式
但是,如果要继续使用所提出的要求 - 以下不完全是您在问题中作为输出所期望的,但作为示例可能有用:
SELECT name, GROUP_CONCAT(STRING(cum)) AS all FROM (
SELECT name,
SUM(INTEGER(num))
OVER(PARTITION BY name
ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cum
FROM (
SELECT name, SPLIT(all) AS num FROM (
SELECT name,
CONCAT(STRING(a),',',STRING(b),',',STRING(c),',',STRING(d)) AS all
FROM yourtable
)
)
)
GROUP BY name
输出是:
name all
Bob 1,3,6,10
Carl 5,11,18,26
取决于您如何使用这些数据 - 它仍然适合您 请注意,现在不要忘记编写像col1 + col2 + .. + col89 + col90这样的内容 - 但仍需要明确提及每一列。
如果你有"奢侈"在GBQ UI之外实现您的需求,而不是在某些Client中 - 您可以使用BigQuery API以编程方式获取表模式,并在您的逻辑/查询上构建并执行它 请看下面的API开始:答案 1 :(得分:0)
不需要UDF:
SELECT name, a, a+b, a+b+c, a+b+c+d
FROM tab