注:这个复购率算的更加细致,比其他的算法更加精妙,能看懂的不多,好好体会!

说明:这是一个订单的复购率,计算的时候单独提取了n天复购的用户明细

关键sql说明:

D:取得用户下的第一单订单的时间,以及把第一单取出来,方便后面把第一单排除,排除后的单就是复购单

od:订单表,关联的时候限制订单时间范围以及排除用户下的第一单    

这里取得是一段时间内,用户的复购情况, adddate用来获取多少天之后,限制了订单表的范围,并且取得是每个用户下的第一单后的多少天的复购情况

以下是sql明细

SELECT A.day,
IFNULL(cast((base.`3days复购用户数`*1.0/base.`完成用户数`)*100 as decimal(18,2)),'0.00') AS rebuyRate3,
IFNULL(cast((base.`5days复购用户数`*1.0/base.`完成用户数`)*100 as decimal(18,2)),'0.00') AS rebuyRate5,
IFNULL(cast((base.`7days复购用户数`*1.0/base.`完成用户数`)*100 as decimal(18,2)),'0.00') AS rebuyRate7,
IFNULL(cast((base.`15days复购用户数`*1.0/base.`完成用户数`)*100 as decimal(18,2)),'0.00') AS rebuyRate15,
IFNULL(cast((base.`30days复购用户数`*1.0/base.`完成用户数`)*100 as decimal(18,2)),'0.00') AS rebuyRate30,
IFNULL(cast((base.`3days复购单量`/base.`3days复购用户数`) as decimal(18,2)),'0.00') AS avgRebuyNum3,
IFNULL(cast((base.`5days复购单量`/base.`5days复购用户数`) as decimal(18,2)),'0.00') AS avgRebuyNum5,
IFNULL(cast((base.`7days复购单量`/base.`7days复购用户数`) as decimal(18,2)),'0.00') AS avgRebuyNum7,
IFNULL(cast((base.`15days复购单量`/base.`15days复购用户数`) as decimal(18,2)),'0.00') AS avgRebuyNum15,
IFNULL(cast((base.`30days复购单量`/base.`30days复购用户数`) as decimal(18,2)),'0.00') AS avgRebuyNum30,
IFNULL(cast((base.`3days复购单量`/base.`完成用户数`) as decimal(18,2))+1,'0.00') AS avgRebuyFinishNum3,
IFNULL(cast((base.`5days复购单量`/base.`完成用户数`) as decimal(18,2))+1,'0.00') AS avgRebuyFinishNum5,
IFNULL(cast((base.`7days复购单量`/base.`完成用户数`) as decimal(18,2))+1,'0.00') AS avgRebuyFinishNum7,
IFNULL(cast((base.`15days复购单量`/base.`完成用户数`) as decimal(18,2))+1,'0.00') AS avgRebuyFinishNum15,
IFNULL(cast((base.`30days复购单量`/base.`完成用户数`) as decimal(18,2))+1,'0.00') AS avgRebuyFinishNum30
FROM
(
    SELECT DISTINCT order_day AS day
    FROM wireless_statistic_offline.order_detail 
    WHERE order_day>='"+sdate+"' AND order_day<='"+edate+"'
) A
LEFT JOIN
(
    SELECT A.service_stop_day,A.`完成用户数`,
    B.`复购用户数` AS '3days复购用户数',B.`复购单量` AS '3days复购单量',
    C.`复购用户数` AS '5days复购用户数',C.`复购单量` AS '5days复购单量',
    D.`复购用户数` AS '7days复购用户数',D.`复购单量` AS '7days复购单量',
    E.`复购用户数` AS '15days复购用户数',E.`复购单量` AS '15days复购单量',
    F.`复购用户数` AS '30days复购用户数',F.`复购单量` AS '30days复购单量'
    FROM
    (
        SELECT service_stop_day,COUNT(DISTINCT order_phone) AS '完成用户数'
        FROM wireless_statistic_offline.order_detail od
        WHERE  source_type=5 AND promotion_type=8 -- 电销
        AND service_stop_day>='"+sdate+"' AND service_stop_day<='"+edate+"'
        GROUP BY service_stop_day
    ) A
    LEFT JOIN
    (
        SELECT service_stop_day,COUNT(DISTINCT IF(r.rebuyOrderNums!=0,r.order_phone,NULL)) AS '复购用户数',SUM(r.rebuyOrderNums) AS '复购单量'
        FROM
        (
            SELECT D.service_stop_day,D.order_phone,COUNT(DISTINCT od.order_id) AS rebuyOrderNums
            FROM wireless_statistic_offline.order_detail od
            RIGHT JOIN 
            (
            SELECT order_phone,MIN(CONCAT(service_stop_time, '\\t', order_id)) AS tag,date(MIN(service_stop_day)) AS service_stop_day
            FROM wireless_statistic_offline.order_detail od
            WHERE  source_type=5 AND promotion_type=8 -- 电销
            AND service_stop_day>='"+sdate+"' AND service_stop_day<='"+edate+"'
            GROUP BY order_phone
            ) D ON (od.order_phone = D.order_phone
            AND od.service_stop_day >= D.service_stop_day AND od.service_stop_day <= ADDDATE(D.service_stop_day, 2)
            AND od.order_id != substring_index(D.tag, '\\t', - 1))
            GROUP BY D.order_phone
        ) r
        GROUP BY r.service_stop_day
    ) B ON A.service_stop_day=B.service_stop_day
    LEFT JOIN
    (
        SELECT service_stop_day,COUNT(DISTINCT IF(r.rebuyOrderNums!=0,r.order_phone,NULL)) AS '复购用户数',SUM(r.rebuyOrderNums) AS '复购单量'
        FROM
        (
            SELECT D.service_stop_day,D.order_phone,COUNT(DISTINCT od.order_id) AS rebuyOrderNums
            FROM wireless_statistic_offline.order_detail od
            RIGHT JOIN 
            (
            SELECT order_phone,MIN(CONCAT(service_stop_time, '\\t', order_id)) AS tag,date(MIN(service_stop_day)) AS service_stop_day
            FROM wireless_statistic_offline.order_detail od
            WHERE  source_type=5 AND promotion_type=8 -- 电销
            AND service_stop_day>='"+sdate+"' AND service_stop_day<='"+edate+"'
            GROUP BY order_phone
            ) D ON (od.order_phone = D.order_phone
            AND od.service_stop_day >= D.service_stop_day AND od.service_stop_day <= ADDDATE(D.service_stop_day, 4)
            AND od.order_id != substring_index(D.tag, '\\t', - 1))
            GROUP BY D.order_phone
        ) r
        GROUP BY r.service_stop_day
    ) C ON A.service_stop_day=C.service_stop_day
    LEFT JOIN
    (
        SELECT service_stop_day,COUNT(DISTINCT IF(r.rebuyOrderNums!=0,r.order_phone,NULL)) AS '复购用户数',SUM(r.rebuyOrderNums) AS '复购单量'
        FROM
        (
            SELECT D.service_stop_day,D.order_phone,COUNT(DISTINCT od.order_id) AS rebuyOrderNums
            FROM wireless_statistic_offline.order_detail od
            RIGHT JOIN 
            (
            SELECT order_phone,MIN(CONCAT(service_stop_time, '\\t', order_id)) AS tag,date(MIN(service_stop_day)) AS service_stop_day
            FROM wireless_statistic_offline.order_detail od
            WHERE  source_type=5 AND promotion_type=8 -- 电销
            AND service_stop_day>='"+sdate+"' AND service_stop_day<='"+edate+"'
            GROUP BY order_phone
            ) D ON (od.order_phone = D.order_phone
            AND od.service_stop_day >= D.service_stop_day AND od.service_stop_day <= ADDDATE(D.service_stop_day, 6)
            AND od.order_id != substring_index(D.tag, '\\t', - 1))
            GROUP BY D.order_phone
        ) r
        GROUP BY r.service_stop_day
    ) D ON A.service_stop_day=D.service_stop_day
    LEFT JOIN
    (
        SELECT service_stop_day,COUNT(DISTINCT IF(r.rebuyOrderNums!=0,r.order_phone,NULL)) AS '复购用户数',SUM(r.rebuyOrderNums) AS '复购单量'
        FROM
        (
            SELECT D.service_stop_day,D.order_phone,COUNT(DISTINCT od.order_id) AS rebuyOrderNums
            FROM wireless_statistic_offline.order_detail od
            RIGHT JOIN 
            (
            SELECT order_phone,MIN(CONCAT(service_stop_time, '\\t', order_id)) AS tag,date(MIN(service_stop_day)) AS service_stop_day
            FROM wireless_statistic_offline.order_detail od
            WHERE  source_type=5 AND promotion_type=8 -- 电销
            AND service_stop_day>='"+sdate+"' AND service_stop_day<='"+edate+"'
            GROUP BY order_phone
            ) D ON (od.order_phone = D.order_phone
            AND od.service_stop_day >= D.service_stop_day AND od.service_stop_day <= ADDDATE(D.service_stop_day, 14)
            AND od.order_id != substring_index(D.tag, '\\t', - 1))
            GROUP BY D.order_phone
        ) r
        GROUP BY r.service_stop_day
    ) E ON A.service_stop_day=E.service_stop_day
    LEFT JOIN
    (
        SELECT service_stop_day,COUNT(DISTINCT IF(r.rebuyOrderNums!=0,r.order_phone,NULL)) AS '复购用户数',SUM(r.rebuyOrderNums) AS '复购单量'
        FROM
        (
            SELECT D.service_stop_day,D.order_phone,COUNT(DISTINCT od.order_id) AS rebuyOrderNums
            FROM wireless_statistic_offline.order_detail od
            RIGHT JOIN 
            (
            SELECT order_phone,MIN(CONCAT(service_stop_time, '\\t', order_id)) AS tag,date(MIN(service_stop_day)) AS service_stop_day
            FROM wireless_statistic_offline.order_detail od
            WHERE  source_type=5 AND promotion_type=8 -- 电销
            AND service_stop_day>='"+sdate+"' AND service_stop_day<='"+edate+"'
            GROUP BY order_phone
            ) D ON (od.order_phone = D.order_phone
            AND od.service_stop_day >= D.service_stop_day AND od.service_stop_day <= ADDDATE(D.service_stop_day, 29)
            AND od.order_id != substring_index(D.tag, '\\t', - 1))
            GROUP BY D.order_phone
        ) r
        GROUP BY r.service_stop_day
    ) F ON A.service_stop_day=F.service_stop_day
) base ON A.day = base.service_stop_day ";

sql复购率计算多种方法相关推荐

  1. java统计excel数据_数据分析实战——EXCEL实现复购率计算

    这是数据分析实战的第三篇(复购率计算篇),本文提供真实数据(脱敏),并梳理复购率计算思路和技巧,通过15分钟的阅读和实践,读者即可根据自己的订单数据灵活计算业务涉及到的复购率了.(实战数据在文末) 相 ...

  2. 华钜同创:亚马逊开店提高产品复购率的七大方法

    华钜同创:亚马逊开店提高产品复购率的七大方法 在互联网的高速推动下,亚马逊平台得到了飞跃式的发展,大批的创业者涌入亚马逊注册开店,形成了亚马逊开店之风,然而随着亚马逊开店运营技巧的不断成熟,单纯运营能 ...

  3. DAX: 复购率计算

    前述 重复购买率(二次购买率)及新老客户占比都是客户数据分析中极其重要的指标(除此之外没什么好简述的,直接上货) 目标 1.把订单分为客户首次购买的订单和后续购买的订单,进而算出重复购买率 2.把客户 ...

  4. Python计算商品复购率

    1. Python计算产品复购率 需求: 给出数据商品购买数据,数据格式.csv,包含:购买月份.手机号,根据该数据计算产品的复购率. 复购率算法: 算法一:单位时间内(按每月):R = 复购人数/总 ...

  5. mysql复购率_Mysql与Pyhton实现复购率和回购率

    一.复购率 复购率:一段时间内,购买2次及以上客户人数,占该时间段内购买过的总人数的比重. 例如:一个月以内,购买该商品超过两次的人有50个人,一个月内买过该商品的人有100个人,该月内复购率就是50 ...

  6. 如何用sql计算回购率、复购率指标

    这6道sql题都很好,建议都过一遍: 考察知识点: 回购率.复购率的理解 子查询 inner join 重点推荐第2题,第5题,第6题 理解需求.理解题意 (★★★★★) datediff ceil ...

  7. Pandas数据分析实战 — 复购率指标计算

    一.指标定义   在单位时间窗口内,多次(2次及以上)消费的用户在总消费用户的占比. 二.计算方法 ①按人数计算   所有购买过产品的顾客,以每个人为独立单位重复购买产品的次数,比如有10个客户购买了 ...

  8. pythonmysql数据分析 tableau_python执行mysql 计算复购率+pyechart+Excel+Tableau绘制双Y轴图...

    现有某超市的订单数据,内容如下: 先求每个会员在每个月的订单数 sql = ''' -- select MemberID, count(SheetID) AS 每个会员的订单数,substring(S ...

  9. mysql求回购率_用户行为分析——回购率、复购率(SQL、Python求解)

    有一个多月没有用Python了,有些生疏o(╥﹏╥)o.通过秦路老师的一道题目,分别使用sql和python求解,顺便复习下python点,重点关注[复购率].[回购率]的解法 ☞秦路老师视频讲解(使 ...

最新文章

  1. web架构设计经验分享 (转)
  2. 电子计算机说明文作文,电脑事物说明文
  3. python刷新cdn_api 刷新是什么-和api 刷新相关的问题-阿里云开发者社区
  4. h3c交换机配置远程管理_高手给说下H3C交换机如何配置telnet远程登录
  5. java加密文件夹_使用java.util.zip压缩文件夹,支持加密,增加描述
  6. 必须学会使用的35个Jquery小技巧
  7. linux命令补遗 - 4
  8. latex如何使节标题居左_为使节构建控制平面的指南第3部分-特定于域的配置API...
  9. asterisk账号和拨号方案mysql存储(静态)
  10. 计算机网络之网络层:5、DHCP协议、ICMP协议、网络地址转换NAT
  11. 全球首款五摄手机Nokia 9 PureView国行版发布:价格惊了!
  12. Rsync的配置与使用
  13. jBPM4工作流应用开发指南
  14. Leetcode 1013. 总持续时间可被 60 整除的歌曲
  15. 增加一个输出,解决一个奇怪的死机
  16. win7升级自带ie8到ie11版本(在不能联网的状态下)
  17. (python)图像下采样(bicubic插值法)
  18. 服务器受美国保护网站,该网站服务器受美国保护
  19. 分布式学习(3)etcd@2@HTTP API v2
  20. latex输入单双引号

热门文章

  1. L1-011 A-B(Python3)
  2. linux退出当前用户快捷键,linux基础命令
  3. kotlin的 if,when,for,while语句
  4. 智能神经网络在音调识别中的应用(Matlab代码实现)
  5. Delphi 操作Word实现粘贴板RTF格式内容替换
  6. 在线搭建Ganglia
  7. 【C语言】结构体定义 typedef struct 用法详解和用法小结
  8. 3D游戏建模薪资低,内卷,毕业就是失业,真正的原因令人崩溃!
  9. GSMA公布MWC19上海最新信息
  10. 如何正确设置显示器的刷新率