【问题标题】:SQL: How to combine rows only until certain action/condition/event is triggeredSQL:如何仅在触发某些操作/条件/事件之前合并行
【发布时间】:2017-11-08 20:58:59
【问题描述】:

我正在处理 BigQuery,并希望查看用户在每个会话中过去的行为,直到他们达到转化,这由 result=1 表示。

现在,我将为 1 个用户提供一个表格示例。我还想为所有用户抽象它。请注意,visitId 对于每个 fullVisitorId 都是唯一的。

#t1
fullVisitorId   visitId    visitNumber     page_views     result     
1               1214       4               11             0
1               112        5               9              0
1               1014       6               10             1
1               1511       7               10             0
1               1614       8               10             1

实际上,我希望查询在第一次转换后删除所有行,从而有效地留给我们:

#t2
fullVisitorId   visitId    visitNumber     page_views     result     
1               1214       4               11             0
1               112        5               9              0
1               1014       6               10             1

如果该fullVisitorId 没有转化,则保留所有行。我可以使用以下 SQL 将其聚合为 1 行:

SELECT fullVisitorId,
MAX(visitNumber)-MIN(visitNumber) AS number_visits,
SUM(page_views)/number_visits AS pages_per_s,
FROM t2
GROUP BY fullVisitorId

这会给我我想要的。

#t3_visitor_past
fullVisitorId   number_visits     pages_per_s       
1               3                 10

请记住,我希望拥有任意数量的不同 fullVisitorId

【问题讨论】:

    标签: sql google-bigquery


    【解决方案1】:

    我通过以下步骤找到了解决方案:

    1. 查找result=1 调用此t4 的所有行
    2. 从上表中,运行SELECT fullVisitorId, visitId, MIN(visitNumber) FROM t4 以获取第一个事件列表调用此表t5
    3. 进行内部连接:SELECT * FROM t1 INNER JOIN t5 ON t1.fullVisitorId = t5.fullVisitorId AND t1.visitNumber <= t5.visitNumber

    非转换用户的相同程序。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-21
      • 1970-01-01
      • 1970-01-01
      • 2014-09-25
      • 1970-01-01
      • 2020-01-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多