使用MySQL进行销售数据分析(练习)

数据说明

由两张表组成,其中orderinfo表记录了3月-5月的订单情况,字段包括orderid、userid、ispaid(支付状态)、price和paidtime(支付时间),共539411行。

userinfo记录了所有用户情况,字段包括userid、sex和birth,共101535行。

分析问题

1.统计不同月份的下单人数

2.统计用户三月份的回购率和复购率

3.统计男女用户的消费频次是否有差异

4.统计多次消费的用户,第一次和最后一次消费间隔是多少?

5.统计不同年龄段,用户的消费金额是否有差异?

6.统计消费的二八法则,消费的top20%用户,贡献了多少额度

导入处理

  1. 在数据库中建表
create table orderinfo(
orderid    int   primary key not null ,
userid      int,
isPaid      varchar(10),
price        float,
paidTime   varchar(30));

create table userinfo(
    userid   int primary key,
    sex     varchar(10),
    birth    date);

2.从cvs导入数据到mysql

load data local  infile 'C:/Users/47207/Desktop/order_info_utf.csv' into table orderinfo  fields terminated by ',';
load data local  infile 'C:/Users/47207/Desktop/user_info_utf.csv' into table userinfo  fields terminated by ',';

注:这里fields terminated by ','是指文件内容按‘逗号为分割填入sql表中

  1. 观察数据,将数据格式转化为统一的sql日期格式


    image.png

1、先把时间格式标准化为 1993-02-27
update orderinfo set paidtime=replace(paidtime,'/','-') where paidtime is not null;
2、然后更新字符串为日期格式,然后才能使用日期函数进行操作,
update orderinfo set paidtime=str_to_date(paidtime,'%Y-%m-%d %H:%i') where paidtime is not null;
预处理完成如下:

image.png

问题解决

1.统计不同月份的下单人数

select DATE_FORMAT(paidtime,'%Y-%M') as month, count(distinct userid)
from orderinfo
where ispaid='已支付'
group by month;
image.png

2.统计用户三月份的回购率复购率
这两个指标逻辑不同:
(1).回购率是三月购买的userid四月依旧购买。

select count(distinct userid)
from orderinfo 
where month(paidtime)=4 and ispaid='已支付' and userid in (
select userid
from orderinfo
where ispaid='已支付' and month(paidtime)=3
group by userid);

上述语句得出了4月依旧购买的人数,除以3月购买人数即可
image.png

方法二:

select count(b.april_user)/count(a.march_user)
from (select userid as march_user
from orderinfo
where isPaid='已支付' and month(paidTime)=3
group by userid) a left join (select userid as april_user
from orderinfo
where isPaid='已支付' and month(paidTime)=4
group by userid) b on a.march_user=b.april_user;
image.png

每个月的复购率可以如下计算:

 select t1.m,count(t1.m),count(t2.m),count(t2.m)/count(t1.m) from 
    (select userid,date_format(paidtime,"%Y-%m-01") m from orderinfo where isPaid = "已支付" group by userid,date_format(paidtime,"%Y-%m-01")) t1
    left join 
    (select userid,date_format(paidtime,"%Y-%m-01") m from orderinfo where isPaid = "已支付" group by userid,date_format(paidtime,"%Y-%m-01")) t2
    on t1.userid = t2.userid and t2.m=date_add(t1.m,interval 1 month) group by t1.m;
image.png

(2).复购率是三月所有消费者中,购买2次及以上消费者的比例。

select count(purchase_num), SUM(IF(purchase_num>1,1,NULL)), SUM(IF(purchase_num>1,1,NULL))/count(purchase_num) as rate
FROM (select userid, count(*) as purchase_num 
from orderinfo
where ispaid='已支付' and month(paidtime)=3
group by userid) a;
image.png

3.统计男女用户的消费频次是否有差异(平均消费次数)

select u.sex, count(o.userid)/count(distinct u.userid)
from orderinfo o, userinfo u
where o.userid=u.userid and o.isPaid='已支付' and u.sex <> ''
group by u.sex;
image.png

4.统计多次消费的用户,第一次和最后一次消费间隔是多少?

select userid, min(paidtime), max(paidtime), DATEDIFF(max(paidtime),min(paidtime))
from orderinfo
where ispaid='已支付'
group by userid
having count(*)>1
order by userid asc;
image.png

5.统计不同年龄段,用户的消费金额是否有差异?
思路:去除有问题日期数据后,将年龄分段(ceil函数向上取整)。再求出每个用户的年龄段、订单数、总金额。最后求出不同年龄段的订单平均金额。

select a.age_level, sum(a.sm)/sum(a.ct)
from 
(select u.userid, u.age_level, count(u.userid) as ct, sum(price) as sm
from orderinfo o join
(select userid, CEIL((year(now())-year(birth))/10) as age_level
from userinfo
where birth > '1901-00-00') u on o.userid=u.userid
where o.isPaid='已支付'
group by u.userid, u.age_level) a
group by a.age_level
order by a.age_level asc;
image.png

6.统计消费的二八法则,消费的top20%用户,贡献了多少额度
思路:先求出总消费金额和用户数。

select count(*), sum(a.sum_p)
from(
select userid, sum(price) as sum_p
from orderinfo
where isPaid='已支付'
group by userid
order by sum(price) desc) a;
image.png

前百分之20%的用户为17130

select count(*), sum(a.sum_p)
from(
select userid, sum(price) as sum_p
from orderinfo
where isPaid='已支付'
group by userid
order by sum(price) desc
limit 17130) a;
image.png

贡献了额度的272201811.46/318501846.54=85%,基本符合二八定律。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351

推荐阅读更多精彩内容