SQL 每月新增,复购人数,复购率

本文介绍了一种通过SQL查询分析订单表中用户复购行为的方法,包括计算每月新增用户数、复购人数及复购率,为业务决策提供数据支持。

订单表
在这里插入图片描述

select 
  firstmon as '月份', 
  count(userid) as '新增', 
  sum(fugou) as '复购人数', 
  sum(fugou)/count(userid) as '复购率'
from
(
  select t1.firstmon, t1.userid, if(count(t1.userid)>1, 1, 0) as fugou
  from 
  (
    select userid, month(min(paytime)) as firstmon
    from `order`
    group by userid
  ) t1
  left join `order` t2
  on
    t1.userid = t2.userid and
    t1.firstmon = month(t2.paytime)
  group by
    t1.firstmon, t1.userid
) t3
group by firstmon;

### MySQL每月新增人数与累计人数差异的计算 为了实现这一目标,可以创建两个子查询来分别获取每个月的新用户数量以及到该月末为止的累积新用户总数。通过这些数据,能够进一步分析各个月份之间的增长情况及其相对于历史总和的变化。 #### 获取每月新增人数 首先定义一个用于提取特定时间段内首次出现用户的SQL片段: ```sql WITH first_purchase AS ( SELECT user_id, MIN(purchase_date) as first_buy_date FROM purchases GROUP BY user_id ) ``` 此部分利用 `MIN()` 函数找出每个用户的最早一次买记录,并将其标记为首日期[^1]。 接着基于上述CTE(Common Table Expression),构建另一个查询以统计每个月有多少新的顾客加入平台: ```sql SELECT DATE_FORMAT(first_buy_date, '%Y-%m') AS month, COUNT(user_id) AS new_users_count FROM first_purchase GROUP BY month; ``` 这段代码按照年月格式化首日期并聚合得到对应期间内的新客数目。 #### 计算截至当前月份的累计人数 对于累积人数而言,在原有基础上稍作修改即可达成目的——即引入窗口函数`SUM() OVER ()`来进行累加操作: ```sql SELECT fp.month, SUM(fp.new_users_count) OVER (ORDER BY fp.month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_new_users FROM ( SELECT DATE_FORMAT(first_buy_date, '%Y-%m') AS month, COUNT(user_id) AS new_users_count FROM first_purchase GROUP BY month ) fp; ``` 这里运用了窗口框架指定从起始行直到当前行为止的所有行作为求和范围,从而实现了逐月递增的效果。 #### 合并与展示最终结果 最后一步就是把两者结合起来形成完整的报表视图,同时计算相邻两个月间的差值变化量: ```sql WITH monthly_stats AS ( WITH first_purchase AS ( SELECT user_id, MIN(purchase_date) as first_buy_date FROM purchases GROUP BY user_id ), monthly_counts AS ( SELECT DATE_FORMAT(first_buy_date, '%Y-%m') AS month, COUNT(user_id) AS new_users_count FROM first_purchase GROUP BY month ) SELECT mc.month, mc.new_users_count, SUM(mc.new_users_count) OVER (ORDER BY mc.month ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS cumulative_new_users FROM monthly_counts mc ), final_result AS ( SELECT *, LAG(cumulative_new_users, 1, 0) OVER (ORDER BY month) AS previous_cumulative_total, cumulative_new_users - COALESCE(LAG(cumulative_new_users, 1, 0) OVER (ORDER BY month), 0) AS difference_from_previous_month FROM monthly_stats ) SELECT * FROM final_result ORDER BY month; ``` 以上脚本不仅展示了如何有效地追踪随时间推移而产生的新客户增量趋势,还提供了有关整体规模扩张速的信息。这有助于深入了解业务动态和发展态势。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

颹蕭蕭

白嫖?

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值