BigQuery运行总和

时间:2015-02-03 05:52:55

标签: sql count distinct google-bigquery running-total

我在BigQuery中有一个数据集,记录了对导致某个事件的个人的捐赠。这是架构

  • first_name:STRING ---(这是捐赠者名称)
  • payment_date:TIMESTAMP ---(捐赠日期)
  • 金额:STRING ---(捐款金额)
  • donated_to_individual:STRING ---(参与者收集捐款)
  • location:string ---(个人将参与的活动地点)
  • year_of_run:STRING ---(活动年份)

我正在尝试创建一个表格,从中我可以为每个收到总计50美元或更多捐款的位置的个人payment_date绘制运行计数。

我下面的最佳尝试给我留下了一张桌子,如果他们当天收到捐款,可以计算筹集50美元或以上的人数:

SELECT
donated_to_id_b
,payment_date
,amount
,running_total
,IF(running_total>=50,'$50','NOPE') as reached_50_dollars

FROM
(SELECT
donated_to_individual as donated_to_id_b
,payment_date as payment_date
,amount
,sum(amount) OVER (PARTITION BY donated_to_id_b ORDER BY payment_date ASC, first_name) as running_total

FROM [robotic-charmer-726:bl_test_data.running_count_over_50_then_150]
WHERE year_of_run='2014')

我害怕采取完全错误的做法......所以任何帮助都会非常感激!

我创建了一个公共虚拟数据集,可在此处找到:bigquery.cloud.google.com/table/robotic-charmer-726:bl_test_data.running_count_over_50_then_150

谢谢!

1 个答案:

答案 0 :(得分:1)

我认为整体方法是合理的 - 分析函数(即OVER子句)是SQL中处理运行总和的正确机制。在SQL中唯一困扰我的是你在SELECT中重命名了donated_to_indivudual列,并在PARTITION BY中使用了重命名的别名。虽然最后评估了OVER子句,但可读性(和可移植性)更好地不依赖于传递的别名。