如何使用SQL按客户到店次数分组统计对应客群的平均消费金额
实现方案
你已经完成了单客户维度的到店次数、总消费统计,接下来只需要对这个结果做分档聚合即可,两步走:
- 第一步:给单客户统计结果加「到店次数分组」标签,用
CASE WHEN判断到店次数的数值,分别归为1次/2次/3次及以上 - 第二步:按「到店次数分组」聚合,计算组内所有客户总消费的平均值
具体SQL实现(CTE写法,可读性更高)
WITH client_stat AS ( -- 复用你已有的单客户统计逻辑,补充字段别名方便后续调用 SELECT ID_Client, SUM(money_spent) AS total_spent, COUNT(DISTINCT `Date`) AS visit_times FROM Services_Data sd GROUP BY ID_Client ) SELECT -- 到店次数分档逻辑 CASE WHEN visit_times = 1 THEN '1次' WHEN visit_times = 2 THEN '2次' ELSE '3次及以上' END AS visit_group, -- 计算对应客群的平均总消费 AVG(total_spent) AS avg_spent_per_group FROM client_stat GROUP BY visit_group;
如果你的数据库不支持CTE(比如低版本MySQL),可以替换为子查询写法:
SELECT CASE WHEN visit_times = 1 THEN '1次' WHEN visit_times = 2 THEN '2次' ELSE '3次及以上' END AS visit_group, AVG(total_spent) AS avg_spent_per_group FROM ( SELECT ID_Client, SUM(money_spent) AS total_spent, COUNT(DISTINCT `Date`) AS visit_times FROM Services_Data sd GROUP BY ID_Client ) AS client_stat GROUP BY visit_group;
补充说明
如果你需要统计的是对应客群的单次到店平均消费,而非单客总消费的平均值,只需要把上述代码中的AVG(total_spent)替换为AVG(total_spent / visit_times)即可。
内容的提问来源于stack exchange,提问作者Gabriele Jack Gervasi
相关产品推荐
相关产品推荐

