MySQL之旅——启程

作者: Samdata | 来源:发表于2020-07-05 17:00 被阅读0次

前言

我是Sam,一个正在转行成为数据分析师的骚年,目前刚刚从南洋理工大学毕业,正在为秋招做准备。转行原因一是因为真的很感兴趣,二是因为此方向前途明朗。注册这个账号可以帮助我记录一下我转行之路上的一些经历,包括一些学习总结、心理活动和困扰、对自己的激励等。同时也希望可以在这里遇到各种转型中和已经成为data大佬的各行各路朋友,一起学习探讨。

那么接下来,我想先对自己说一句话:既然选择了这条路,就要坚定地走下去。道路坎坷,坚持下来,等到成为数据分析师的那一天,你一定会感谢,现在的自己!加油!奥利给!


学习计划分为几部分,依次为:

1.工具使用:MySQL、python、PowerBI

2.数据分析方法总结

3.项目实践

那么这周的目标就是搞定MySQL,开始,冲冲冲!

MySQL学习

之前接触过SQL,但是仅会一些基础查询语句,因此这周开始系统学习MySQL,以下是一些自己认为比较难记忆的点,汇总一下。

难点查缺补漏

SQL  table相关语句

SQL创建table的约束

int unsigned-无符号整型

auto_increment-自动增长

default-以默认值填充

not null-不为空

primary key-主键

创建数据表:

create table xxx (字段 类型 约束,

字段 类型 约束,

);

修改表列名

alter table students modify pet varchar(20) default 'cat';

插入数据

insert into 表名 values();

insert into students values(1,'list',18,178,'男',8);

insert into students values(1,'老李',17,168,'男',4),((1,'老刘',18,179,'男',3));

显示目前年份 date_format(now(),'%Y')

limit start,count; 从start后面一个数开始取,如limit 0 就是从第一个数开始取

select x from x where (a,b)=(1,2) a对应1,b对应2

时间函数

获取当前时间:

now 函数:获取当前时间信息,执行语句初就获取时间

sysdate 函数:执行到此函数再获取。

如:select now(), sleep(3),now();select sysdate(), sleep(3) , sysdate();有区别

获取年月日:current_date()

获取时分秒:current_time()

提取时间信息:month()、year()、day()等

时间计算

两个日期时间差:timestampdiff(unit, begin, end)

日期往前推:date_sub(被推移时间, interval '推移多久' 推移方式),如select date_add('2008-08-08 10:12:33', interval '01:10:30' hour_second);注意次函数必须要对 xxxx-xx-xx年月日完整的被推移时间使用,若不完整应用date_format进行标准化

日期往后推:date_add(被推移时间, interval '推移多久' 推移方式)

时间格式的转换:

字符串转换为时间:str_to_date(表示时间的字符串,字符串日期格式),  如 select str_to_date('08.09.2008 08:09:30', '%m.%d.%Y %h:%i:%s'); 结果:2008-08-09 08:09:30

日期格式转换为特殊字符串:date_format (日期,字符串格式),如:select date_format('2020-02-03 13:45:06.676','%Y-%M-%D %I:%i:%S-%T') ; --2020-February-3rd 01:45:06-13:45:06

如何计算复购率和回购率

涉及表:

  orderinfo  订单详情表

    | orderid  订单id

    | userid    用户id

    | isPaid    是否支付

    | price    付款价格

    | paidTime  付款时间

  userinfo  用户信息表

    | userid    用户id

    | sex        用户性别

    | birth      用户出生日期

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

复购率

a、筛选三月份下单的用户

select userid

from orderinfo

where month(paidtime)='03';

c、找到三月用户下载次数

  select userid

from orderinfo

where month(paidtime)='03'

group by userid;

d、对于复购用户数和总购买用户数进行加和,并计算复购用户数/总购买人数

错误写法,

select count(1) as paid_cons, sum(if(cons>1,1,0)) as fugou_cons,

fugou_cons/paid_cons as fugou_rate (注意不能在select后用as来进行运算,要写原值)

from(select

userid,count(userid) as cons

from orderinfo

where month(paidtime)='03'

group by userid) as a;(子表后需要加名称)

正确:select count(1) as paid_cons, sum(if(cons>1,1,0)) as fugou_cons,

sum(if(cons>1,1,0))/count(1) as fugou_rate

from(select

userid,count(userid) as cons

from orderinfo

where month(paidtime)='03'

group by userid) as a;

回购率:3月购买的人中4月又购买的人数/3月购买的人的总数

a、找到每个月份的购买情况

select userid,

date_format(paidtime,'%Y-%m-01') as paid_m

from orderinfo

where ispaid='已支付' 

group by userid, date_format(paidtime,'%Y-%m-01')

--注意 若date_format(paidtime,'%Y-%m-01')写成 date_format(paidtime,'%Y-%m'),在后面使用date_sub函数时将出错,使用date_sub函数必须要让年月日完整。

b、找到这个月购买了下个月也购买了的人,通过join相邻两列的paidtime

select *

from

(select userid,

date_format(paidtime,'%Y-%m-01') as paid_m

from orderinfo

where ispaid='已支付' 

group by userid, date_format(paidtime,'%Y-%m-01')) a

left join

(select userid,

date_format(paidtime,'%Y-%m-01') as paid_m

from orderinfo

where ispaid='已支付' 

group by userid, date_format(paidtime,'%Y-%m-01')) b

on a.userid=b.userid

and date_add(a.paid_m, interval 1 month)=b.paid_m

c、计算3月购买的人中4月又购买的人数count(b.paid_m)/3月购买的人的总数 count(a.paid_m)

select count(a.paid_m) as '本月购买人数', count(b.paid_m) as '本月与下月都购买人数', count(b.paid_m)/ count(a.paid_m) as '复购率'

from

(select userid,

date_format(paidtime,'%Y-%m-01') as paid_m

from orderinfo

where ispaid='已支付' 

group by userid, date_format(paidtime,'%Y-%m-01')) a

left join

(select userid,

date_format(paidtime,'%Y-%m-01') as paid_m

from orderinfo

where ispaid='已支付' 

group by userid, date_format(paidtime,'%Y-%m-01')) b

on a.userid=b.userid

and date_add(a.paid_m, interval 1 month)=b.paid_m

group by a.paid_m

总结

目前正在MySQL打怪的路上,已经从单个语句过渡到做完整题目,期间发现MySQL单个语句都不难,难就难在如何把不同的语句交叉使用完成1+1>2的效果,比如计算复购率的时候,用到了sum函数,使整个计算简便了很多。

很多题都琢磨了好久都没琢磨出来,最后还是看了答案才懂,中间踩了不少坑,但学习之路本该如此,现在多踩坑,未来路就平,少年仍需努力,未来可期~加油!

相关文章

  • MySQL之旅——启程

    前言 我是Sam,一个正在转行成为数据分析师的骚年,目前刚刚从南洋理工大学毕业,正在为秋招做准备。转行原因一是因为...

  • 读书变现训练营作业(14)

    今天的课程讲了英雄之旅 复盘本节课的内容,复盘如下: 英雄之旅步骤:启程,启蒙和归来。 第一阶段启程: 1 主人公...

  • 英伦之旅,启程

    期待已久的英伦之旅,启程了。但还是觉得那么突然,很久没有离开宝贝这么长时间了,不舍……没有同行者,有点孤独...

  • 大学之旅·启程

    时光荏苒,转眼自己就不再懵懂的小女孩,转眼自己脱离了高三的题海,转眼自己就到了上大学的年纪。 漫漫大...

  • CPA之旅启程

    对于工作一直没有太多的想法,一直处于迷茫中,今天CPA的六门教材都已经收到了,看了看目录觉得自己是可以,是有能力考...

  • 启程GitHub之旅

    在Github建立了一个仓库,计划用来将自己学习Java的一些源代码上传到上面,方便阅读者获取(实际上也没有人啦,...

  • 上海之旅(启程)

    今天下午,我和家人开始了去往上海的行程。我16年夏天的时候和朋友一起去过上海旅游。 在我的印象中,上海是一个包...

  • 启程:素食之旅

    如若有人问起,我一生中影响至为深刻的时段是什么时候,我会毫不犹豫地回答是高三那段休学的日子。 自那一年开始,骤然没...

  • 南疆之旅启程

    十天西安行程结束,母亲今日出院静养待康复。十七天南疆心理法律服务就要启程了,回归日常工作模式,回来时就是爱人生日时...

  • 北疆游记~跟着“老三届”圆梦新疆行(3)

    图片发自简书App 06 北疆之旅启程 同学聚会第二天,外地来疆的同学们就启程了北疆之旅。第一站是号称“神的自留地...

网友评论

    本文标题:MySQL之旅——启程

    本文链接:https://www.haomeiwen.com/subject/xokvqktx.html