【问题标题】:Bigquery: Calculate balance or rewrite SQL script in BigqueryBigquery:在 Bigquery 中计算余额或重写 SQL 脚本
【发布时间】: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://stackoverflow.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 中的余额吗?

谢谢!

【问题讨论】:

    标签: google-bigquery balance


    【解决方案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 是否存储在变量中
      猜你喜欢
      • 1970-01-01
      • 2023-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-17
      • 1970-01-01
      • 1970-01-01
      • 2021-04-06
      相关资源
      最近更新 更多