订单全量表(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:48:58 浏览: 129
好的,针对您的问题,我可以给出以下 SQL 查询语句:
```
SELECT
COUNT(DISTINCT od1.order_buyer_id) AS num_repeat_buyers,
SUM(od1.order_pay_amount) / COUNT(DISTINCT od1.order_buyer_id) AS avg_repeat_order_amount
FROM
order.dim od1
JOIN
(
SELECT
order_buyer_id
FROM
order.dim
WHERE
dt >= '2022-01-01' AND dt <= '2022-01-05' AND pay_date IS NOT NULL
GROUP BY
order_buyer_id
HAVING
MAX(dt) <= DATE_SUB('2022-01-05', INTERVAL 30 DAY)
) AS od2
ON
od1.order_buyer_id = od2.order_buyer_id
WHERE
od1.dt >= '2022-01-01' AND od1.dt <= '2022-01-05' AND od1.pay_date IS NOT NULL AND od1.dt <> od2.dt
```
解释一下这个查询语句的含义:
- 首先,我们用一个子查询 `od2` 找出在 2022.01.01-2022.01.05 这几天内购买并且在 T+30 日内有复购的买家 ID;
- 然后,我们再次查询订单表 `od1`,找出在 2022.01.01-2022.01.05 这几天内购买且不在 `od2` 中的买家 ID,并且计算这些买家的复购率和人均复购金额。
这样,就可以得到 2022.01.01-2022。01.05 隔天的 T+30 日复购率以及人均复购金额了。
阅读全文