数据分析项目 --SQL 的用户消费分析

本贴最后更新于 1596 天前,其中的信息可能已经时移世改

1、导入数据
方法 1 直接导入 CSV 数据,不用建表做关联,如下图
image.png
方法 2 建表做关联后导入数据
建表,订单表(订单编号,用户 ID,付款情况,价格,订单付款时间)

create table orderform(  
orderid varchar(20) null,  userid  varchar(10) null, paid varchar(10) null,  
price varchar(10) null, payment_time datetime null)  

建表,客户信息表

create table userlist(  
userid varchar(10) null,gender varchar(5) null,birth datetime null)

1.1 需要更新下列名,更新列名的语句如下,不过还是表设计里面改起来最快
exec sp_rename 'order_info_utf.column1','order_info_utf.orderid'

2、用户消费行为分析相关
有关用户消费行为的统计指标,主要的分析内容主要是:
销量和消费金额分析、消费的时间节点、复购率回购率分析、用户分层、用户生命周期和消费周期等,具体可以看看

2.1 可以统计不同月份订单数、用户数、下单总金额

select convert(varchar(6),payment_time,112) as year_month, count(orderid) as order_num ,
count(distinct userid) as user_num,sum(price) as sum from order_info_utf  where paid='已支付'
group by convert(varchar(6),payment_time,112)
order by year_month

image.png

2.2 统计用户复购率、回购率(这两个不一样的)
a. 复购率 当月消费一次以上(叫复购)人数的占比情况(消费次数 >1 的人数 ÷ 消费总人数)

这里遇到了一个难点,就是 SQL 转换成带 % 号的比率,折磨人,计算完毕的比率是 float 型,% 是字符型,所以拼接是要将 float 转换后再加 %,然后是 char 和 varchar 的区别导致的,也可以用 convert 转换

select t.*,concat(cast(round((cast(t.repeat_user as float)/t.user_num)*100,2)as varchar),'%') as repeat_rate from 
(select  year_month,count(distinct userid)as user_num,
sum(case when b.frequency>1 then 1 else 0 end) as repeat_user from 
(select convert(varchar(6),payment_time,112) as year_month , userid,count(userID) as frequency from order_info_utf 
where paid='已支付' group by convert(varchar(6),payment_time,112), userID) b
group by year_month) t
order by year_month

image.png

image.png

b.回购率,回购率一般以月为单位区分,上月购买过的人在本月又买了,先找出本月购买的

select a.year_month1 年月,a.购买人数,b.回购人数  from 
 (select convert(varchar(6),payment_time,112) as year_month1,count( DISTINCT userid) 购买人数
 from order_info_utf where paid='已支付' group by convert(varchar(6),payment_time,112))a
 left join 
 (select convert(varchar(6),payment_time,112) year_month2,count (DISTINCT a.userid )回购人数 
 from order_info_utf a where a.paid='已支付' and  a.userid in 
 (select userid from order_info_utf B where paid='已支付' 
 and convert(varchar(6),B.payment_time,112)=convert(varchar(6),a.payment_time,112)-1)
 group by convert(varchar(6),payment_time,112))b on a.year_month1=b.year_month2
 order by a.year_month1

image.png

2.3.统计男女的消费频次是否有差异,一般用户分层可以从性别、年龄段来着手
a.从性别分层找差异

 select u.gender,sum(b.frenquency) as sum_frequency,count(distinct u.userid),
round(convert(float,sum(b.frenquency))/convert(float,count(distinct u.userid)),2)
 as avg_frequency from user_info_utf u left join 
 (select userid,count(userid) as  frenquency from order_info_utf  where paid='已支付'
 group by userid) b on u.userid=b.userid  where gender is not null group by gender

image.png

结论: 可见在性别方面,平均频次相差不大,那么可以顺便分析下不同性别的消费总额与平均额

select u.gender,sum(b.expenditure) as sum_expenditure,count(distinct u.userid), round(convert(float,sum(b.expenditure))/convert(float,count(distinct u.userid)),2)
as avg_expenditure from user_info_utf u left join 
(select userid,sum(price) as expenditure from order_info_utf  where paid='已支付' group by userid)b
on u.userid=b.userid where u.gender is not  null
group by u.gender

image.png

b.年龄分层,从年龄段来分析,先将年龄分层,最小的 3 岁,最大的 1947,显然大于 119 的基本属于异常值,可以将其剔除

 select c.age_leval,count(c.userid) as sum_frequency ,sum(a.expenditure) as sum_expenditure,
 round(sum(a.expenditure)/count(c.userid),4) as avg_expenditure from 
 (select b.userid,age_leval=(case when age <=17 then '0-17岁' when age between 18 and 25 then '18-25岁'when age between 26 and 35 then '26-35岁'
                        when age between 36 and 45 then '36-45岁' when age between 46 and 55 then '46-55岁' else '56岁以上' end)
 from (select userid,age=datediff(yy,convert(varchar(10),birth,23),GETDATE()) from user_info_utf where birth is not null
 and datediff(yy,convert(varchar(10),birth,23),GETDATE())<119) b )c
 left join 
(select userid,sum(price) as expenditure from order_info_utf  where paid='success' group by userid) a on c.userid=a.userid
 group by c.age_leval

image.png
可以看出 26-35 和 36-45 年龄段的消费热刺和消费额都遥遥领先,但是在人均方面优势并不是十分明显,只有 36-45 年龄段的人均比较高,总消费额和总消费频次最多的 26-35 年龄段,人均消费和 56 岁以上年龄段的人均消费相差无几。

2.4.统计多次消费的用户,第一次和最后一次消费时间的间隔

select distinct userid,count(userid)as frequency,
convert(varchar(10),min(payment_time),120) as first_payment_time,
convert(varchar(10),max(payment_time),120) as last_payment_time,
datediff(dd,min(payment_time),max(payment_time)) as time_lag
from order_info_utf where paid='已支付' 
group by userid having count(userid)>=2
order by frequency desc

image.png

2.5.消费黄金法则,二八原则,订单数量最多的 20% 客户,创造了多少的消费额,占总消费额的比例
以及订单额最多的客户,占到 80% 的订单额的用户的数占比总用户数的比率

select count(userid),sum(user_price),c.sum_user,c.sum_price,round(sum(b.user_price)/c.sum_price,2) as rate
from (select top 20 percent  userid,count(userid) as user_frequency,sum(price) as user_price  from order_info_utf 
where paid='success' group by userid order by count(userid) desc) b ,
(select count(distinct userid) as sum_user ,sum(price) as sum_price from  order_info_utf where paid='success') c
group by c.sum_price,c.sum_user

image.png

以上,符合二八法则,关键用户满足,如果比率小于 0.8,可以着重发展先大客户

  • SQL
    124 引用 • 296 回帖 • 3 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • JavaScript

    JavaScript 一种动态类型、弱类型、基于原型的直译式脚本语言,内置支持类型。它的解释器被称为 JavaScript 引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在 HTML 网页上使用,用来给 HTML 网页增加动态功能。

    710 引用 • 1173 回帖 • 178 关注
  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 42 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    284 引用 • 4481 回帖 • 655 关注
  • 安全

    安全永远都不是一个小问题。

    189 引用 • 813 回帖
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1425 引用 • 10043 回帖 • 471 关注
  • Sandbox

    如果帖子标签含有 Sandbox ,则该帖子会被视为“测试帖”,主要用于测试社区功能,排查 bug 等,该标签下内容不定期进行清理。

    368 引用 • 1212 回帖 • 578 关注
  • NetBeans

    NetBeans 是一个始于 1997 年的 Xelfi 计划,本身是捷克布拉格查理大学的数学及物理学院的学生计划。此计划延伸而成立了一家公司进而发展这个商用版本的 NetBeans IDE,直到 1999 年 Sun 买下此公司。Sun 于次年(2000 年)六月将 NetBeans IDE 开源,直到现在 NetBeans 的社群依然持续增长。

    78 引用 • 102 回帖 • 642 关注
  • IDEA

    IDEA 全称 IntelliJ IDEA,是一款 Java 语言开发的集成环境,在业界被公认为最好的 Java 开发工具之一。IDEA 是 JetBrains 公司的产品,这家公司总部位于捷克共和国的首都布拉格,开发人员以严谨著称的东欧程序员为主。

    180 引用 • 400 回帖
  • Q&A

    提问之前请先看《提问的智慧》,好的问题比好的答案更有价值。

    6499 引用 • 29202 回帖 • 248 关注
  • sts
    2 引用 • 2 回帖 • 147 关注
  • GitBook

    GitBook 使您的团队可以轻松编写和维护高质量的文档。 分享知识,提高团队的工作效率,让用户满意。

    3 引用 • 8 回帖
  • gRpc
    10 引用 • 8 回帖 • 52 关注
  • 外包

    有空闲时间是接外包好呢还是学习好呢?

    26 引用 • 232 回帖 • 7 关注
  • Elasticsearch

    Elasticsearch 是一个基于 Lucene 的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于 RESTful 接口。Elasticsearch 是用 Java 开发的,并作为 Apache 许可条款下的开放源码发布,是当前流行的企业级搜索引擎。设计用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。

    116 引用 • 99 回帖 • 266 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 426 关注
  • 微服务

    微服务架构是一种架构模式,它提倡将单一应用划分成一组小的服务。服务之间互相协调,互相配合,为用户提供最终价值。每个服务运行在独立的进程中。服务于服务之间才用轻量级的通信机制互相沟通。每个服务都围绕着具体业务构建,能够被独立的部署。

    96 引用 • 155 回帖
  • 笔记

    好记性不如烂笔头。

    303 引用 • 777 回帖
  • 百度

    百度(Nasdaq:BIDU)是全球最大的中文搜索引擎、最大的中文网站。2000 年 1 月由李彦宏创立于北京中关村,致力于向人们提供“简单,可依赖”的信息获取方式。“百度”二字源于中国宋朝词人辛弃疾的《青玉案·元夕》词句“众里寻他千百度”,象征着百度对中文信息检索技术的执著追求。

    63 引用 • 785 回帖 • 252 关注
  • 电影

    这是一个不能说的秘密。

    120 引用 • 597 回帖
  • Hibernate

    Hibernate 是一个开放源代码的对象关系映射框架,它对 JDBC 进行了非常轻量级的对象封装,使得 Java 程序员可以随心所欲的使用对象编程思维来操纵数据库。

    39 引用 • 103 回帖 • 681 关注
  • 知乎

    知乎是网络问答社区,连接各行各业的用户。用户分享着彼此的知识、经验和见解,为中文互联网源源不断地提供多种多样的信息。

    10 引用 • 66 回帖
  • PWL

    组织简介

    用爱发电 (Programming With Love) 是一个以开源精神为核心的民间开源爱好者技术组织,“用爱发电”象征开源与贡献精神,加入组织,代表你将遵守组织的“个人开源爱好者”的各项条款。申请加入:用爱发电组织邀请帖
    用爱发电组织官网:https://programmingwithlove.stackoverflow.wiki/

    用爱发电组织的核心驱动力:

    • 遵守开源守则,体现开源&贡献精神:以分享为目的,拒绝非法牟利。
    • 自我保护:使用适当的 License 保护自己的原创作品。
    • 尊重他人:不以各种理由、各种漏洞进行未经允许的抄袭、散播、洩露;以礼相待,尊重所有对社区做出贡献的开发者;通过他人的分享习得知识,要留下足迹,表示感谢。
    • 热爱编程、热爱学习:加入组织,热爱编程是首当其要的。我们欢迎热爱讨论、分享、提问的朋友,也同样欢迎默默成就的朋友。
    • 倾听:正确并恳切对待、处理问题与建议,及时修复开源项目的 Bug ,及时与反馈者沟通。不抬杠、不无视、不辱骂。
    • 平视:不诋毁、轻视、嘲讽其他开发者,主动提出建议、施以帮助,以和谐为本。只要他人肯努力,你也可能会被昔日小看的人所超越,所以请保持谦虚。
    • 乐观且活跃:你的努力决定了你的高度。不要放弃,多年后回头俯瞰,才会发现自己已经成就往日所仰望的水平。积极地将项目开源,帮助他人学习、改进,自己也会获得相应的提升、成就与成就感。
    1 引用 • 487 回帖 • 6 关注
  • Chrome

    Chrome 又称 Google 浏览器,是一个由谷歌公司开发的网页浏览器。该浏览器是基于其他开源软件所编写,包括 WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。

    60 引用 • 287 回帖 • 1 关注
  • 周末

    星期六到星期天晚,实行五天工作制后,指每周的最后两天。再过几年可能就是三天了。

    14 引用 • 297 回帖
  • IPFS

    IPFS(InterPlanetary File System,星际文件系统)是永久的、去中心化保存和共享文件的方法,这是一种内容可寻址、版本化、点对点超媒体的分布式协议。请浏览 IPFS 入门笔记了解更多细节。

    20 引用 • 245 回帖 • 230 关注
  • Angular

    AngularAngularJS 的新版本。

    26 引用 • 66 回帖 • 511 关注
  • danl
    61 关注