MySQL之旅——启程

前言

我是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函数,使整个计算简便了很多。

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

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