在BigQuery中合并首行与其他行,生成客户全量采购路径
解决BigQuery中生成客户所有采购路径的问题
要生成客户首单之后的所有可能采购路径组合,我们可以通过提取各阶段订单的唯一值,再进行交叉连接来实现。以下是具体的BigQuery SQL方案:
WITH customer_order_stages AS ( -- 提取每个客户的唯一首单SKU(若客户存在多个首单可根据业务逻辑调整) SELECT DISTINCT email, first_order FROM `your-project.your-dataset.your-table` WHERE first_order IS NOT NULL ), second_order_options AS ( -- 收集客户所有非空的第二阶段订单SKU并去重 SELECT DISTINCT email, second_order FROM `your-project.your-dataset.your-table` WHERE second_order IS NOT NULL ), third_order_options AS ( -- 收集客户所有非空的第三阶段订单SKU并去重 SELECT DISTINCT email, third_order FROM `your-project.your-dataset.your-table` WHERE third_order IS NOT NULL ) -- 关联各阶段选项,生成所有可能的采购路径组合 SELECT cos.email, cos.first_order, soo.second_order, too.third_order FROM customer_order_stages cos INNER JOIN second_order_options soo ON cos.email = soo.email CROSS JOIN third_order_options too ON cos.email = too.email ORDER BY cos.email, cos.first_order, soo.second_order, too.third_order;
代码说明:
- customer_order_stages:确保我们拿到每个客户唯一的首单SKU,避免重复的首单记录干扰结果。
- second_order_options和third_order_options:分别提取客户在第二、第三阶段出现过的所有非空SKU并去重,得到该阶段的所有可选路径节点。
- 最后的连接逻辑:先通过
INNER JOIN关联首单和第二阶段选项,再用CROSS JOIN关联第三阶段选项,这样就能生成首单之后第二阶段和第三阶段的所有可能组合,完全匹配你期望的结果格式。
如果你的业务场景中存在客户缺少某阶段订单的情况,可以将INNER JOIN改为LEFT JOIN,并根据需求处理NULL值(比如过滤或标记)。
内容的提问来源于stack exchange,提问作者HossBender
相关产品推荐
相关产品推荐

