这6道sql题都很好,建议都过一遍;

考察知识点:

  • 回购率、复购率的理解
  • 子查询
  • inner join
  • 重点推荐第2题,第5题,第6题
  • 理解需求、理解题意 (★★★★★)
  • datediff
  • ceil 函数
  • row_number() 、 子查询内容
  • 二八定律的应用

复购率和回购率分析:
复购率:复购率是指重复购买的频率,用于反映用户的付费频率。复购率指的是一定时间内,消费两次以上的用户数/付费人数
回购率:曾经购买过的用户在某一时期内再次购买的占比

– lulu_Course

附上源码:

-- lulu_Course -- 1.统计不同月份的下单人数
select month(paidTime),count(distinct userid) from data.orderinfo
where isPaid = "未支付"
group by month(paidTime)-- 2.统计用户三月份的回购率和复购率
/*
名词解释:
复购率:在这个月里面,所有的消费人数中有多少个是消费一次以上人数的占比;
回购率:上月购买的人数,在下一个月依旧购买;
*/-- 复购率:
select count(ct),count(if(ct>1,1,null))
from(select userid,count(userid) as ct from order_infowhere isPaid = "已支付"and month(paidTime) = 3group by userid)t -- 回购率:涉及跨月份# 法1:代码适合一次性需求
select count(1) from
where userid in (子查询,算出3月份的userid)
and month(paidTime) = 4
group by userid;# 法2:
-- step1:
select * from(select userid,date_format(paidTime,"%Y-%m-01") as mfrom order_info where ispaid = "已支付"group by userid,date_format(paidTime,"%Y-%m-01"))t1
left join(select userid,date_format(paidTime,"%Y-%m-01") as mfrom order_info where ispaid = "已支付"group by userid,date_format(paidTime,"%Y-%m-01"))t2
)
on t1.userId = t2.userId and t1.m = date_sub(t2.m,interval 1 month)
-- where t1.m = date_sub(t2.m,interval 1 month)亦可-- step2:select t1.m,count(t1.m) as 购买人数,count(t2.m) as 回购人数 from(select userid,date_format(paidTime,"%Y-%m-01") as mfrom order_info where ispaid = "已支付"group by userid,date_format(paidTime,"%Y-%m-01"))t1
left join(select userid,date_format(paidTime,"%Y-%m-01") as mfrom order_info where ispaid = "已支付"group by userid,date_format(paidTime,"%Y-%m-01"))t2
)
on t1.userId = t2.userId and t1.m = date_sub(t2.m,interval 1 month)
-- where t1.m = date_sub(t2.m,interval 1 month)
group by t1.m-- 3.统计男女用户的消费频次是否有差异
/*
理解:求消费频次?总计、求平均 (当然篇平均数未必是靠谱的,这只是一个其中的分析思路吧)*/select sex,avg(ct) from(select t1.userid,sex,count(1) as ct from order_info t1inner info(select * from user_infowhere sex <> "" )t2on o.userid = t.useridgroup by userid,sex)t3
group by sex;-- 4.统计多次消费的用户,第一次和最后一次消费间隔是多少?
-- 操作1
select userid,max(paidTime),min(paidTime)
from order_info
where ispaid = '已支付'
group by userid
having count(1)>1;-- 操作2:(lulu:勉强估计一下生命周期)
select avg(interval) as avg_interval
from(select userid,max(paidTime),min(paidTime),datediff(max(paidTime),min(paidTime)) as interval
from order_info
where ispaid = '已支付'
group by userid
having count(1)>1) tepmt;-- 5.统计不同年龄段,用户的消费金额是否有差异
-- 计算每个用户的消费频次
select age,avg(ct)
from(select  o.userid,age,count(o.userid) as ct
from order_info o where ispaid = '已支付'
inner join(select userid,ceil((year(now())-year(birth))/10) as agefrom userinfowhere birth > '1901-00-00')t -- 过滤掉117
on o.userid = t.userid
group by o.userid,age)t2
group by age;-- 补充知识:ceil()函数和floor()函数
-- ceil(n) 取大于等于数值n的最小整数;
-- floor(n) 取小于等于数值n的最小整数;-- 6.统计消费的二八法则,消费的top20%用户,贡献了多少额度-- 方法1:取巧做法,见lulu-- 方法2:row_number/子查询方法
select sum(total) as 'top20%贡献额度'
from(select  userid,sum(price) as total,row_number()over(order by sum(price) desc) as 排名from order_info o where ispaid = '已支付'group by userid) t
where  排名 < (select count(1) from order_info  where ispaid = '已支付'  group by userid) * 0.2;
-- 取巧做法:select count(userid)*0.2 得到 17000m-- row_number()/ 注意临时表不能复用

如何用sql计算回购率、复购率指标相关推荐

  1. SQL练习题:回购率 复购率 消费差异

    文章目录 SQL练习题:回购率 复购率 消费差异 统计不同月份的下单人数 统计用户三月份的回购率和复购率 统计男女用户的消费频次是否有差异 统计多次消费的用户,第一次和最后一次消费间隔是多少 统计不同 ...

  2. 工作问题:SQL求解用户复购率

    SQL求解用户复购率 1.说说问题 2.解决方案 3.附加需求:求每个月总体的复购率 4.附录:输入数据结构及数据SQL 也可在 微信公众号 上观看 1.说说问题 遇到了一个问题:给定一个订单表,里面 ...

  3. Python计算商品复购率

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

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

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

  5. 如何用SQL统计用户复购(or留存)数据

    在工作中,如果涉及到用户交易的数据,我们可能会经常统计每天的新户(用户在当日首次完成交易)交易用户数.新户在次日.T+n日.次周.下下周.在自然月当月.在下月.在下下月等不同的时间周期内的复购数据. ...

  6. 写个数仓吧(15)品牌复购率——ADS层

    建表语句 hive (gmall)> drop table ads_sale_tm_category1_stat_mn; create table ads_sale_tm_category1_s ...

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

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

  8. hive练习题(二)计算用户的复购率和回购率

    hive练习题(二)计算用户的复购率和回购率 数据表ods_sales_orders前10行 复购率 定义:在某时间窗口内重复消费用户(消费两次及以上的用户)在总消费用户中占比 例如,按月作为统计窗口 ...

  9. sql复购率计算多种方法

    注:这个复购率算的更加细致,比其他的算法更加精妙,能看懂的不多,好好体会! 说明:这是一个订单的复购率,计算的时候单独提取了n天复购的用户明细 关键sql说明: D:取得用户下的第一单订单的时间,以及 ...

最新文章

  1. 退市35年后,牛仔裤品牌李维斯要重新IPO了
  2. 云计算技术 — 混合云
  3. ImportError: cannot import name FileStorage
  4. 罚款200元的交通违法行为
  5. 申请Let's Encrypt永久免费SSL证书
  6. python安装opencv库、提示找不到pip_OpenCV Python importorror:DLL加载失败:找不到指定的模块...
  7. linux---多线程---信号量--不懂
  8. PERC5/6 RAID配置中文手册
  9. 【先定一个小目标】Asp.net Core 在IIS上的托管运行
  10. css预处理器--sass学习($变量名)
  11. js事件冒泡和事件捕获的区别
  12. html在线围棋对战,闲情奕趣(基于html5的围棋应用)
  13. vs2017 git 操作重置、还原、挑拣对比
  14. Java 将小写的数字转换成对应的大写的汉字数字
  15. IIS 6 UrlRewrite 步骤
  16. Linux 系统如何设置开机程序自启动
  17. NC Portal单据增加自定义按钮
  18. _stdcall _cdec区别
  19. InterSystems 2022全球峰会亮点解读:Smart Data Fabric与InterSystems数据平台的超能力
  20. 5,000名智利商家现接受加密货币支付

热门文章

  1. 华硕路由器里的虚拟服务器在哪里,华硕RT-AC86U路由器怎么设置端口转发服务
  2. Scratch打气球游戏 电子学会图形化编程scratch等级考试三级真题答案2019-9
  3. 消息队列的全双工通信
  4. 经方时方接轨之――茵陈蒿汤合甘露饮
  5. Go和Rust计算性能大比武
  6. php实训心得体会doc,php实训报告心得体会php实训报告心得体会
  7. sqlserver数据库账户登录18456错误怎么解决?
  8. 让制作APP变成搭积木
  9. 【搬运】1 简谱和基本知识
  10. 东方博宜OJ 1863 - 【入门】特殊的数字四十