google-bigquery - BigQuery SQL 运行总数

标签 google-bigquery

知道如何在 BigQuery SQL 中计算运行总数吗?

id   value   running total
--   -----   -------------
1    1       1
2    2       3
3    4       7
4    7       14
5    9       23
6    12      35
7    13      48
8    16      64
9    22      86
10   42      128
11   57      185
12   58      243
13   59      302
14   60      362 

对于使用相关标量查询的传统 SQL 服务器来说,这不是问题:
SELECT a.id, a.value, (SELECT SUM(b.value)
                       FROM RunTotalTestData b
                       WHERE b.id <= a.id)
FROM   RunTotalTestData a
ORDER BY a.id;

或加入:
SELECT a.id, a.value, SUM(b.Value)
FROM   RunTotalTestData a,
       RunTotalTestData b
WHERE b.id <= a.id
GROUP BY a.id, a.value
ORDER BY a.id;

但我找不到让它在 BigQuery 中工作的方法......

最佳答案

2018 更新:原始问题中的查询现在无需修改即可使用。

#standardSQL
WITH RunTotalTestData AS (
  SELECT * FROM UNNEST([STRUCT(1 AS id, 1 AS value),(2,0),(3,1),(4,1),(5,2),(6,3)]) 
)

SELECT a.id, a.value, (SELECT SUM(b.value)
                       FROM RunTotalTestData b
                       WHERE b.id <= a.id) runningTotal
FROM   RunTotalTestData a
ORDER BY a.id;

enter image description here

2013 更新:您可以使用 SUM() OVER() 来计算运行总计。

在你的例子中:
SELECT id, value, SUM(value) OVER(ORDER BY id)
FROM [your.table]

一个工作示例:
SELECT word, word_count, SUM(word_count) OVER(ORDER BY word)
FROM [publicdata:samples.shakespeare]
WHERE corpus  = 'hamlet'
AND word > 'a' LIMIT 30;

关于google-bigquery - BigQuery SQL 运行总数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14664578/

相关文章:

sql - 如何在 BigQuery 中取消透视?

python - 处理使用 docker 读取和写入数据到 google big query 的 python 脚本的自动身份验证

sql - 如何在 Google BigQuery 中透视数据集?

google-bigquery - 如何重复 BigQueryOperator Dag 并将不同日期传递到我的 sql 文件

google-bigquery - bq cmd查询Google表格出现 "Access Denied: BigQuery BigQuery: No OAuth token with Google Drive scope was found"错误

python - 如何让 BigQuery 的 API 使用标准 SQL 进行查询?

firebase - firebase 分析中如何生成 user_engagement 事件?

sql - SQL 中偏移每一行的 Sumproduct

json - 从 BigQuery 列中提取 Json 值

google-bigquery - bq 命令行是否支持 writeDisposition : WRITE_TRUNCATE?