我在 BigQuery 中有一个数据集,记录了在活动前向个人捐款的情况。这是架构
- first_name:字符串---(这是捐赠者姓名)
- payment_date:时间戳---(捐赠日期)
- 金额:字符串---(捐赠金额)
- donated_to_individual:字符串---(收集捐款的参与者)
- 地点:字符串---(个人将参加的活动地点)
- year_of_run:字符串---(活动年份)
我正在尝试创建一个表格,从中可以绘制每个地点收到总计 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
谢谢!
我认为整体方法是合理的 - 分析函数(即OVER子句)是SQL中处理运行总和的正确机制。在您的SQL中唯一让我有点困扰的是您在SELECT中重命名了donated_to_indivudual列,并在PARTITION BY中使用了重命名的别名。虽然 OVER 子句是最后计算的,但为了可读性(和可移植性),最好不要依赖被继承的别名。