现有销售表:Order(m_id, ord_id, amt, paytime),请将用户表Member和销售表关联起来,查看每个用户2023年1月的销售额(m_id:用户编号;ord_id,:订单编号;amt:订单消费金额;paytime:支付时间);,查询23年1月消费的用户(剔除单笔销售金额大于500的异常订单)次月复购且复购率,复购金额,人均复购订单数;
时间: 2024-02-17 14:02:27 浏览: 12
可以使用以下 SQL 语句来实现:
```sql
SELECT
m.m_id,
COUNT(DISTINCT o1.ord_id) AS total_orders,
COUNT(DISTINCT o2.ord_id) AS repeat_orders,
COUNT(DISTINCT o2.ord_id) / COUNT(DISTINCT o1.ord_id) AS repeat_rate,
SUM(CASE WHEN o2.amt IS NOT NULL THEN o2.amt ELSE 0 END) AS repeat_amt,
SUM(CASE WHEN o2.amt IS NOT NULL THEN o2.amt ELSE 0 END) / COUNT(DISTINCT o2.ord_id) AS per_capita_repeat_amt
FROM
Member m
INNER JOIN Order o1 ON m.m_id = o1.m_id
LEFT JOIN Order o2 ON m.m_id = o2.m_id AND o2.paytime >= DATEADD(month, 1, DATEFROMPARTS(2023, 1, 1)) AND o2.paytime < DATEADD(month, 2, DATEFROMPARTS(2023, 1, 1)) AND o2.amt <= 500
WHERE
YEAR(o1.paytime) = 2023 AND MONTH(o1.paytime) = 1
GROUP BY
m.m_id;
```
上述 SQL 语句中,首先使用 INNER JOIN 将 Member 表和 Order 表按照 m_id 进行关联。然后使用 WHERE 子句过滤出 2023 年 1 月的订单,并剔除单笔销售金额大于 500 的异常订单。接着,使用 LEFT JOIN 关联 2023 年 2 月的订单,计算复购率、复购金额、人均复购订单数等指标。最后使用 GROUP BY 子句按照 m_id 进行分组并计算指标。