基于BigQuery获取指定StoreId下近30天订单金额Top50的CustomerId
BigQuery 查询实现方案
核心逻辑说明
要实现需求,需要完成以下几步:
- 从Table1中筛选指定门店、近30天内的
order类型记录 - 关联Table2获取对应订单的金额数据
- 按CustomerId汇总总订单金额,最后取金额最高的前50个用户ID
完整查询语句
WITH customer_order_summary AS ( SELECT t1.CustomerId, SUM(t2.AmountOfOrder) AS total_spent FROM `你的项目ID.你的数据集.Table1` t1 INNER JOIN `你的项目ID.你的数据集.Table2` t2 ON t1.StoreId = t2.StoreId AND t1.OrderId = t2.OrderId WHERE t1.StoreId = '目标门店ID' -- 替换为实际要查询的StoreId AND t1.Type = 'order' AND t1.Timestamp >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY) GROUP BY t1.CustomerId ) SELECT CustomerId, total_spent FROM customer_order_summary ORDER BY total_spent DESC LIMIT 50;
关键细节解释
- CTE(公共表表达式):
customer_order_summary用于先完成数据关联和金额汇总,让主查询逻辑更清晰 - 关联条件:同时匹配
StoreId和OrderId,确保订单数据关联准确 - 时间筛选:
TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 30 DAY)自动计算当前时间往前推30天的时间点,精准筛选近30天数据 - 排序与限制:按总消费金额降序排序后用
LIMIT 50直接取前50名用户
使用时记得替换语句中的项目ID、数据集名称和目标StoreId为实际值。
内容的提问来源于stack exchange,提问作者Madhur Joshi
相关产品推荐
相关产品推荐

