Bigquery:在 Bigquery 中计算余额或重写 SQL 脚本
Posted
技术标签:
【中文标题】Bigquery:在 Bigquery 中计算余额或重写 SQL 脚本【英文标题】:Bigquery: Calculate balance or rewrite SQL script in Bigquery 【发布时间】:2021-12-24 15:59:17 【问题描述】:请帮忙。我正在尝试找到一个解决方案,如何通过在 BigQuery 中使用“in”和“out”以及以前的余额来计算每一行的当前余额: '当前余额'= '以前的余额'+ 'in' - 'out'
我有:
| id | in |out|
| ---| ---|---|
|1 | 10 |0 |
|2 | 30 |5 |
|3 | 0 |1 |
预期结果:
| id| in|out| Balance |
|---|---|---|---------|
|1 | 10| 0| 10|
|2 | 30| 5| 35|
|3 | 0 | 1| 34|
这里提出了同样的问题:[https://***.com/questions/9394418/calculate-balance-with-mysql][1],但提供的解决方案适用于 MySQL。
如果有办法将其传输到 BigQuery:
SELECT
`table`.`ID`,
`table`.`In`,
`table`.`Out`,
@Balance := @Balance + `table`.`In` - `table`.`Out` AS `Balance`
FROM `table`, (SELECT @Balance := 0) AS variableInit
ORDER BY `table`.`ID` ASC
或者还有其他选项可以计算 BigQuery 中的余额吗?
谢谢!
【问题讨论】:
【参考方案1】:考虑以下方法
select * except(initial_balance),
initial_balance + sum(t.in - t.out) over win as balance
from your_table t,
unnest([struct(0 as initial_balance)])
window win as (order by id)
如果应用于您问题中的样本数据并且初始余额 = 0 - 输出为
【讨论】:
【参考方案2】:试试这个
SELECT SUM(IN) OVER(ORDER BY ID) - SUM(OUT) OVER (ORDER BY ID)
FROM YOUR_TABLE
【讨论】:
谢谢!有什么办法可以添加初始余额? tge intial bal 是否存储在变量中以上是关于Bigquery:在 Bigquery 中计算余额或重写 SQL 脚本的主要内容,如果未能解决你的问题,请参考以下文章