现有销售表:Order(m_id, ord_id, amt, paytime),请将用户表Member和销售表关联起来,查看每个用户2023年1月的销售额(m_id:用户编号;ord_id,:订单编号;amt:订单消费金额;paytime:支付时间);用case when语句,统计高频用户,普通用户,流失用户三个等级的用户数,其中高频用户为近一年消费12单以上;普通用户为近一年消费3-12单,流失用户为近一年消费3单以下;
时间: 2024-02-17 19:02:33 浏览: 41
可以使用以下 SQL 语句来实现:
```sql
SELECT
m.m_id,
SUM(CASE WHEN YEAR(o.paytime) = 2023 AND MONTH(o.paytime) = 1 THEN o.amt ELSE 0 END) AS sales,
CASE
WHEN COUNT(DISTINCT CASE WHEN DATEDIFF(month, o.paytime, DATEFROMPARTS(2023, 1, 1)) <= 12 THEN o.ord_id END) >= 12 THEN '高频用户'
WHEN COUNT(DISTINCT CASE WHEN DATEDIFF(month, o.paytime, DATEFROMPARTS(2023, 1, 1)) <= 12 THEN o.ord_id END) BETWEEN 3 AND 11 THEN '普通用户'
ELSE '流失用户'
END AS user_type
FROM
Member m
LEFT JOIN Order o ON m.m_id = o.m_id
GROUP BY
m.m_id;
```
上述 SQL 语句中,首先使用 LEFT JOIN 将 Member 表和 Order 表按照 m_id 进行关联。然后使用 CASE WHEN 语句,根据每个用户最近一年的消费订单数,判断其用户类型。最后使用 GROUP BY 子句按照 m_id 进行分组并计算每个用户的销售额和用户类型。注意,如果一个用户在最近一年内没有任何消费记录,也应该被视为流失用户。
阅读全文