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

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

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 关注

相关帖子

欢迎来到这里!

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

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

推荐标签 标签

  • Elasticsearch

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

    116 引用 • 99 回帖 • 256 关注
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 50 关注
  • Bug

    Bug 本意是指臭虫、缺陷、损坏、犯贫、窃听器、小虫等。现在人们把在程序中一些缺陷或问题统称为 bug(漏洞)。

    76 引用 • 1738 回帖 • 6 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Love2D

    Love2D 是一个开源的, 跨平台的 2D 游戏引擎。使用纯 Lua 脚本来进行游戏开发。目前支持的平台有 Windows, Mac OS X, Linux, Android 和 iOS。

    14 引用 • 53 回帖 • 516 关注
  • 锤子科技

    锤子科技(Smartisan)成立于 2012 年 5 月,是一家制造移动互联网终端设备的公司,公司的使命是用完美主义的工匠精神,打造用户体验一流的数码消费类产品(智能手机为主),改善人们的生活质量。

    4 引用 • 31 回帖 • 4 关注
  • 脑图

    脑图又叫思维导图,是表达发散性思维的有效图形思维工具 ,它简单却又很有效,是一种实用性的思维工具。

    21 引用 • 58 回帖
  • Laravel

    Laravel 是一套简洁、优雅的 PHP Web 开发框架。它采用 MVC 设计,是一款崇尚开发效率的全栈框架。

    19 引用 • 23 回帖 • 700 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    106 引用 • 152 回帖
  • Webswing

    Webswing 是一个能将任何 Swing 应用通过纯 HTML5 运行在浏览器中的 Web 服务器,详细介绍请看 将 Java Swing 应用变成 Web 应用

    1 引用 • 15 回帖 • 632 关注
  • 域名

    域名(Domain Name),简称域名、网域,是由一串用点分隔的名字组成的 Internet 上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。

    43 引用 • 208 回帖 • 2 关注
  • C

    C 语言是一门通用计算机编程语言,应用广泛。C 语言的设计目标是提供一种能以简易的方式编译、处理低级存储器、产生少量的机器码以及不需要任何运行环境支持便能运行的编程语言。

    83 引用 • 165 回帖 • 11 关注
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 627 关注
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3169 引用 • 8208 回帖
  • React

    React 是 Facebook 开源的一个用于构建 UI 的 JavaScript 库。

    192 引用 • 291 回帖 • 434 关注
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    7 引用 • 30 回帖 • 446 关注
  • V2EX

    V2EX 是创意工作者们的社区。这里目前汇聚了超过 400,000 名主要来自互联网行业、游戏行业和媒体行业的创意工作者。V2EX 希望能够成为创意工作者们的生活和事业的一部分。

    17 引用 • 236 回帖 • 391 关注
  • WebClipper

    Web Clipper 是一款浏览器剪藏扩展,它可以帮助你把网页内容剪藏到本地。

    3 引用 • 9 回帖 • 2 关注
  • BookxNote

    BookxNote 是一款全新的电子书学习工具,助力您的学习与思考,让您的大脑更高效的记忆。

    笔记整理交给我,一心只读圣贤书。

    1 引用 • 1 回帖 • 2 关注
  • PWA

    PWA(Progressive Web App)是 Google 在 2015 年提出、2016 年 6 月开始推广的项目。它结合了一系列现代 Web 技术,在网页应用中实现和原生应用相近的用户体验。

    14 引用 • 69 回帖 • 140 关注
  • 学习

    “梦想从学习开始,事业从实践起步” —— 习近平

    163 引用 • 473 回帖
  • RIP

    愿逝者安息!

    8 引用 • 92 回帖 • 313 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 476 关注
  • gRpc
    10 引用 • 8 回帖 • 51 关注
  • Kubernetes

    Kubernetes 是 Google 开源的一个容器编排引擎,它支持自动化部署、大规模可伸缩、应用容器化管理。

    109 引用 • 54 回帖 • 1 关注
  • OpenResty

    OpenResty 是一个基于 NGINX 与 Lua 的高性能 Web 平台,其内部集成了大量精良的 Lua 库、第三方模块以及大多数的依赖项。用于方便地搭建能够处理超高并发、扩展性极高的动态 Web 应用、Web 服务和动态网关。

    17 引用 • 41 关注
  • Sandbox

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

    379 引用 • 1221 回帖 • 588 关注