订单全量表 (order.dim) 分区dt='yyyy-mm-dd' —笔订单一行数据 买家id order_buyer_id 支付金额 order pay amount 支付日期pay date, 格式 yyyy-mm-dd' 问题:需要取2022.01.01• 2022.01.05各天的t+30日 复购率以及人均复购金额 (即t日购买的买家,t+30 日内仍有购买的为复购)
时间: 2024-03-07 22:47:23 浏览: 118
好的,根据您提供的数据,我可以提供以下 SQL 查询语句来计算您所需的指标:
```sql
-- 计算 t+30 日内复购率和人均复购金额
SELECT
dt, -- 日期
SUM(IF(repeat_buyer, 1, 0)) / COUNT(DISTINCT order_buyer_id) AS repeat_rate, -- t+30 日内复购率
SUM(IF(repeat_buyer, order_pay_amount, 0)) / SUM(IF(repeat_buyer, 1, 0)) AS avg_repeat_amount -- 人均复购金额
FROM (
-- 计算每个买家的第一次购买日期和是否为复购
SELECT
order_buyer_id,
MIN(pay_date) AS first_order_date,
COUNT(DISTINCT IF(pay_date <= DATE_ADD(dt, INTERVAL 30 DAY), order_buyer_id, NULL)) > 1 AS repeat_buyer
FROM order.dim
WHERE dt BETWEEN '2022-01-01' AND '2022-01-05' -- 取2022.01.01-2022.01.05的数据
GROUP BY order_buyer_id
) t
JOIN order.dim o ON t.order_buyer_id = o.order_buyer_id AND o.pay_date <= DATE_ADD(t.first_order_date, INTERVAL 30 DAY)
GROUP BY dt
```
这个查询会先计算每个买家的第一次购买日期和是否为复购,然后再根据每个买家的第一次购买日期和订单表中的支付日期来判断是否为 t+30 日内的复购买家。最后,按照日期分组计算复购率和人均复购金额。
阅读全文