满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?
Posted
技术标签:
【中文标题】满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?【英文标题】:How can I reset running total in SQL BigQuery after condition in other column is met? 【发布时间】:2019-04-16 11:16:10 【问题描述】:在 BigQuery 中,我有一个来自 Google Analytics 的命中级别数据集,其中包括:date
、fullVisitorId
、visitId
、transactionRevenue
和 pageHome
(无论某人是否是该页面on 是否为主页)。对于每个访问者,我想计算pageHome
直到进行交易的总和。如果进行了交易,则transactionRevenue
为数字,否则为空。示例见附图。
Example table running total
我尝试通过fullVisitorId
对分区进行求和,并通过visitId
进行排序。但是,当transactionId
不为空时,我不确定如何重置。
SELECT
date,
fullVisitorId,
visitId,
visitNumber,
transactionRevenue,
pageHome,
SUM(pageHome) OVER(PARTITION BY fullVisitorId ORDER BY visitId ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS sumpageHome
此代码计算每个访问者的累计总数,但在交易完成后它尚未重置。
【问题讨论】:
【参考方案1】:对于每个访问者,我想计算 pageHome 的运行总数,直到进行交易。
使用子查询计算交易编号。然后在累积总和中使用它:
SELECT SUM(pageHome) OVER (PARTITION BY fullVisitorId, transaction_count ORDER BY DATE) as running_pageHome
FROM (SELECT t.*,
COUNT(TransactionRevenue) OVER (PARTITION BY fullVisitorId ORDER BY DATE) as transaction_count
FROM t
) t
【讨论】:
谢谢,几乎可以了!但是,没有交易的访问会被添加到之前的交易中。知道如何解决这个问题吗?以上是关于满足其他列中的条件后,如何在 SQL BigQuery 中重置运行总计?的主要内容,如果未能解决你的问题,请参考以下文章