在data下面新建两张order和user表,将原数据导入mysql,csv的格式以逗号分隔。

load data local infile 'C:/Users/Administrator/Desktop/day1/user_info_utf.csv' into table data.user

fields terminated by ',';

order表部分如下:

select * from data.order

image.png

user表部分如下:

image.png

统计不同月份的下单人数:

思路:按月进行分组,统计人数,注意去重。

select date_format(paidTime,'%Y%m') as month,

count(distinct userId) as countid

from data.order

where isPaid='已支付'

group by date_format(paidTime,'%Y%m')

image.png

三月份的下单人数高于四月份,五月份的数据含有些脏数据不作分析。

统计三月份的复购率和回购率

复购率:三月份买过一次后,当月再次购买

回购率:三月份买过一次后,四月份继续购买

1.三月份复购率:

思路:在三月份的条件下,对userId进行分组再计数,筛选出购买次数大于1的人占三月份购买总人数的占比

select userId,count(userId) as paidcounts from data.order

where isPaid ='已支付'

and date_format(paidTime,'%Y%m')=201603

group by userId

先找出每个用户的购买次数:

image.png

筛选出大于1的占比:

select count(userId),count(if(paidcounts>1,1,null)) as repaidc

from(

select userId,count(userId) as paidcounts from data.order

where isPaid ='已支付'

and date_format(paidTime,'%Y%m')=201603

group by userId) t

image.png

两者相除,得出结论

三月份的复购率(保留一位小数)约为:30.9%

2.三月份的回购率:

通用方法:可求每个月的回购率

思路:先将每个用户所有的消费时间筛选出来,用left join,产生笛卡尔积效应,筛选出月份相差为1的记录,求出占比。

select userId,date_format(paidTime,'%Y-%m-01') m

from data.order

where isPaid='已支付'

group by userId,date_format(paidTime,'%Y-%m-01')

image.png

将表进行自连接,条件是id相同,且前后消费时间相差一个月

image.png

再此基础上对各个月份进行分组,计算占比

select t1.m,count(t1.m),count(t2.m) cback from(

select userId,date_format(paidTime,'%Y-%m-01') m from data.order

where isPaid='已支付'

group by userId,date_format(paidTime,'%Y-%m-01')) t1

left join(

select userId,date_format(paidTime,'%Y-%m-01') m from data.order

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)

group by t1.m

image.png

三月份回购率约为:23.9%

统计男女消费频次是否有差异:

思路:将order表和user表连接,条件是已支付且性别不为空。对userId分组,查询出对应的消费次数。再次嵌套groupby对性别分组,求平均值。

select sex,avg(c)

from(

select o.userId,u.sex,count(u.sex) as c

from data.order o

join data.user u

on o.userId=u.userId

where isPaid='已支付' and sex !=''

group by o.userId) t

group by sex

image.png

男女的消费频次约分别为1.78次和1.80次,消费频次差距不大。

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

思路:对userId分组,过滤出消费大于1次的,再找出时间的最大和最小值、消费间隔。

select userId,max(paidTime),min(paidTime),

datediff(max(paidTime),min(paidTime)) deltaday

from data.order

where isPaid='已支付'

group by userId

having count(userId)>1

image.png

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

先将用户年龄按10的梯级划分,把大于100岁的去除。

select userId,sex,ceil(age/10) as level from(

select userId,sex,year(now())-year(user.birth) as age

from data.user) t1

where age<100

image.png

将两表进行连接:

image.png

再对连接表的level和userId分组,计算出每个userId的消费次数,最后算出平均值。

select level,avg(ct)

from(

select t2.level,o.userId,count(o.userId) ct

from(

select userId,sex,ceil(age/10) as level from(

select userId,sex,year(now())-year(user.birth) as age

from data.user) t1

where age<100) t2

join data.order o

on o.userId=t2.userId and o.isPaid='已支付'

group by t2.level,o.userId) t3

group by level

image.png

根据结果可知,0-30年龄段的消费频次较低,中年段的消费频次相对低龄段有所增高且平均消费频次在所有年龄段中最高,到老龄段频次又逐渐降低。

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

思路:先计算出前20%的用户数量,再算出前20%用户贡献额度总和。

image.png

排名前20%的用户的消费总额度:

select count(userId) as top20,sum(sp)

from(

select userId,sum(price) as sp

from data.order

where isPaid='已支付'

group by userId

order by sp desc

limit 17130) t

image.png

总人数的消费总额度是:

image.png

前20%的用户贡献了约85%的额度。

MySQL经典案例分析_mysql 案例分析一(用作学习)相关推荐

  1. mysql 经典入门教程_MySQL 经典入门教程

    MySQL 经典入门教程 1 定义 数据库中的表:一行叫一条记录.每一列叫一个属性,或一个字段. 主键:表中的某个特殊字段,具有唯一的确定的值,可以根据该字段唯一的确定一条记录 外键:表中的某个字段的 ...

  2. mysql经典总结文章_MySQL基础篇(01):经典实用查询案例,总结整理

    MySQL基础篇(01):经典实用查询案例,总结整理 发布时间:2020-02-26 22:25:21 来源:51CTO 阅读:244 作者:知了一笑 本文源码:GitHub·点这里 || GitEE ...

  3. mysql 5.7 缺点_MySQL · 特性分析 · MySQL 5.7 外部XA Replication实现及缺陷分析

    MySQL 5.7 外部XA Replication实现及缺陷分析 MySQL 5.7增强了分布式事务的支持,解决了之前客户端退出或者服务器关闭后prepared的事务回滚和服务器宕机后binlog丢 ...

  4. mysql工具使用意义_MySQL性能分析、及调优工具使用详解

    本文汇总了MySQL DBA日常工作中用到的些工具,方便初学者,也便于自己查阅. 先介绍下基础设施(CPU.IO.网络等)检查的工具: vmstat.sar(sysstat工具包).mpstat.op ...

  5. mysql索引分析_MySQL索引分析和优化

    什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录.表里面 ...

  6. 猫眼电影MySQL数据库怎么写_MySQL简要分析猫眼电影TOP100榜

    作者:国服帅座 经济学在读硕士 公众号:统计之家 提出问题 对于广大电影爱好者来说,猫眼平台提供了海量电影信息.在其官网上有一个TOP100榜单,我们使用SQL语句简单分析该榜单电影,试图了解如下这些 ...

  7. mysql log bin 分析_MySQL bin-log分析方法

    Author:Echo Chen(陈斌) Email:chenb19870707@gmail.com Date:September9th, 2014 Explain      前段时间,游戏服务器停服 ...

  8. mysql rename时长_MySQL · BUG分析 · Rename table 死锁分析

    背景 InnoDB buffer pool中的page管理牵涉到两个链表,一个是lru链表,一个是flush 脏块链表,由于数据库的特性: 脏块的刷新,是异步操作: page存在两个版本,一个是ibd ...

  9. mysql查询日志分析_mysql日志分析

    日志文件(log)就是一个跟踪记录的列表,它可以协助我们时刻掌握系统及应用服务的动作状态,在故障排查的时候提供最详细准确地信息,帮助我们快速查找原因,减少我们凭主观的经验去猜测,这样的答案更具有说服力 ...

最新文章

  1. tomcat乱码怎么解决_PDF转word乱码怎么办?解决方法如此简单!
  2. 提高cube性能的一些方法(一)
  3. 用时间分类能量再用能量分类时间
  4. python sklearn.neural_network.MLPClassifier() 神经网络改变模型复杂度的四种方法
  5. 胡珀:从危到机,AI 时代下的安全挑战
  6. 基于webrtc多人音视频的研究(一)
  7. 兼容IE和FF的JS HTMLEncode和HTMLDecode的完整实例[转]
  8. java selenium 日志_java - 支持selenium日志_java_酷徒编程知识库
  9. hadoop集群中客户端修改、删除文件失败
  10. 正则表达式中的开头和结尾
  11. 在python中创建列表的最佳和/或最快方法
  12. Android 系统(222)---Android 的lowmemorykiller机制
  13. 你的第一个Windows程序——绘制窗口
  14. ActiveMQ—Windows操作系统中如何安装启动ActiveMQ
  15. webpack的安装和执行
  16. 群晖设置php.ini,【入门普及贴】群晖NAS组装、洗白经验总结及分享
  17. 《PWM整流器及其控制》读书笔记-第二章-PWM整流器拓扑结构及原理
  18. Qt Moc及信号-槽源代码解析
  19. 东北大学《传输原理》随堂练习
  20. Learning with Pseudo-Ensembles

热门文章

  1. [架构之路-92]:《软件架构设计:程序员向架构师转型必备》-2-解析软件架构的概念
  2. SQL A表数据更新到B表
  3. 智能化建筑弱电工程的实施
  4. 操作系统(十一)文件系统实现
  5. css的浮动与清除理解
  6. SELinux如何永久禁用
  7. 橙色云荣获第五届“鲲鹏杯”山东新动能·软件创新创业大赛一等奖
  8. 铁四院闵阳师弟的坐标转换软件MY Coordinate Tool2.7介绍
  9. 宇隆光电冲刺上交所上市:毛利率持续下滑,收入极其依赖京东方
  10. python3元组学习