• 本站分享从数据采集到数据应用全链条知识,包含数据仓库搭建、数据分析、模型算法、数据平台系统、数据产品等。
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

数据分析师之快速掌握SQL基础

全部文章 hey 5年前 (2020-06-08) 565次浏览 0个评论 扫描二维码

 

SQL技能是数据分析师的必备技能,作者在之前的文章《你不知道的数据分析师中也提到了,数据分析师 50%的时间都在写SQL

 

本文将从一道数据分析师的SQL面试题开始分析讲解,期间,会涉及到SQL的基础操作和分析函数的使用等知识点,然后为大家总结出了一份快速掌握SQL基础的指南,希望能够帮助到SQL初学者。

 

 

一道 SQL 面试题

 

这是一道来自百度数据部门的面试题,主要考察 row_number 的使用。

 

题目:SQL 语句如何查询各用户最长连续登录天数?如图左边是源表 User,右边是需要达到的查询结果。

 

数据分析师之快速掌握SQL基础

 

 

数据分析师之快速掌握SQL基础
Step 1 审题
数据分析师之快速掌握SQL基础
 

各用户最长的连续登录天数,先要确定连续登录的数据特征,日期表现为每个用户的后一天和前一天的差值为 1,不能为大于 1 的值,一旦大于 1 也就间断了。那么可以设置一列序号,如果是连续的话,这列序号也是会随着日期同步增长的,那么日期减去这个序号,应该都是一个确定的日期。

比如说 2017 年 1 月 1 号对应的序号是 1,2017 年 1 月 2 号对应的序号是 2,2017 年 1 月 3 号对应的序号是 3,那么 2017 年 1 月 1 号-1=2016 年 12 月 31 号,同理,2017 年 1 月 2 号-2=2016 年 12 月 31 号,都是同样的日期。

根据这个日期与序号之差和 UID 进行分组统计出不同 UID 和差值的数量,最后按照 UID 分组统计出数量的最大值。具体流程见下图:

 

数据分析师之快速掌握SQL基础

 

 

数据分析师之快速掌握SQL基础
Step 2 创建表
数据分析师之快速掌握SQL基础
 

CREATE TABLE IF NOT EXISTS `loadrecord` (

  `uid` int,

  `loadtime` string

) ;

INSERT INTO `loadrecord` (`uid`, `loadtime`) VALUES

  (‘201’, ‘2017/1/1’),

  (‘201’, ‘2017/1/2’),

  (‘202’, ‘2017/1/2’),

  (‘202’, ‘2017/1/3’),

  (‘203’, ‘2017/1/3’),

  (‘201’, ‘2017/1/4’),

  (‘202’, ‘2017/1/4’),

  (‘201’, ‘2017/1/5’),

  (‘202’, ‘2017/1/5’),

  (‘201’, ‘2017/1/6’),

  (‘203’, ‘2017/1/6’),

  (‘203’, ‘2017/1/7’);

 

数据分析师之快速掌握SQL基础
Step 3 添加一列日期序号
数据分析师之快速掌握SQL基础
 

 

select uid,loadtime,row_number() over (partition by uid order by loadtime) as row_num

from loadrecord;

 

结果如下图所示:

数据分析师之快速掌握SQL基础

 

这里用到了row_number 窗口分析函数,将每个用户按照登录日期升序进行编号。

 

 

数据分析师之快速掌握SQL基础
Step 4 获得一个新日期
数据分析师之快速掌握SQL基础
 

select uid,loadtime,row_number() over (partition by uid order by loadtime) asrow_num,date_sub(regexp_replace(loadtime,’/’,’-‘),row_number() over (partition by uid order by loadtime)) as new_loadtime

from loadrecord

数据分析师之快速掌握SQL基础

 

这里先用字符串函数 regexp_replace 将日期格式修改为”yyyy-MM-dd”格式,然后用 date_sub 函数将日期相减。

 

 

数据分析师之快速掌握SQL基础
Step 5 第一次聚合
数据分析师之快速掌握SQL基础
 

select uid,new_loadtime,count(uid) as new_loadtime_num

from

(

    select uid,loadtime,row_number() over(partition by uid order by loadtime) as row_num,date_sub(regexp_replace(loadtime,’/’,’-‘),row_number() over (partition by uid order by loadtime)) as new_loadtime

    from loadrecord

) a

group by uid,new_loadtime

数据分析师之快速掌握SQL基础

 

这里使用了 count 聚合函数和子查询操作,通过这一次的聚合统计出每个用户对应的所有连续登录的天数。

 

 

数据分析师之快速掌握SQL基础
Step 6 审题
数据分析师之快速掌握SQL基础
 

select uid,max(new_loadtime_num) as max_new_loadtime_num

from

(

  select uid,new_loadtime,count(uid) asnew_loadtime_num

  from

  (

    select uid,loadtime,row_number() over(partition by uid order by loadtime) as row_num,date_sub(regexp_replace(loadtime,’/’,’-‘),row_number() over (partition by uid order by loadtime)) as new_loadtime

    from loadrecord

  ) a

  group by uid,new_loadtime

) b

group by uid

数据分析师之快速掌握SQL基础

 

这里使用了 max 聚合函数和子查询操作,通过这一次的聚合统计出每个用户对应的最大的登录时长。

 

到此,以上为这道 SQL 题目的完整解答过程,整个过程涉及 SQL 的基础操作(建表、查询、限定、排序)的同时,也加入了聚合函数、子查询和窗户分析函数相对进阶的操作。

各用户最长的连续登录天数-这样短短的 12 个字,翻译成 SQL 语句居然用到了两层嵌套查询、两个聚合操作、一个日期操作和一个窗口分析函数。其实在数据分析师的日常工作中,比这道 SQL 题目复杂的需求也是常见的,所以学好 SQL 对于数据分析师工作的重要性也就不言而喻了吧。

 

本文的后半部分将用思维导图的方式给初学者总结出一份快速学习 SQL 的指南,主要是一些常用的知识点,根据二八定律,只需掌握最重要的 20%核心知识点,就足以胜任 80%的常见工作,这里总结的应该超过了 20%,足够用了。

 

SQL 学习指南

 

 

数据分析师之快速掌握SQL基础
Stage 1 基础入门
数据分析师之快速掌握SQL基础
 

本阶段是基础入门,了解 SQL 的基本语法,主要涉及表的操作。

 

数据分析师之快速掌握SQL基础

 

数据分析师之快速掌握SQL基础
Stape 2 基础查询
数据分析师之快速掌握SQL基础
 

查询操作是最常用的最重要的,下图是基础查询用到的列的操作、运算符、结果限定的语法。

 

数据分析师之快速掌握SQL基础

数据分析师之快速掌握SQL基础
Stape 3 复杂查询
数据分析师之快速掌握SQL基础
 

 

复杂查询包括子查询、关联子查询和视图,这一部分的内容如果掌握了,可以实际工作中的很多问题。

 

数据分析师之快速掌握SQL基础

 

 

数据分析师之快速掌握SQL基础
Stape 4 数据更新
数据分析师之快速掌握SQL基础
 

本阶段学习数据更新的基本操作,包括插入、删除和更新。

数据分析师之快速掌握SQL基础

 

 

数据分析师之快速掌握SQL基础
Stape 5 常用函数
数据分析师之快速掌握SQL基础
 

本阶段学习常用函数,此处按照熟悉函数、字符串函数、日期函数、转换函数列举了较常用的函数,不同的数据库对应的函数名称可能会不一样,大家在使用的时候可以查阅相应数据库的函数文档。

数据分析师之快速掌握SQL基础

 

数据分析师之快速掌握SQL基础
Stape 6 聚合排序
数据分析师之快速掌握SQL基础
 

本阶段学习聚合和排序,主要介绍聚合查询、分组、分组后筛选、分组后排序的语法和注意事项。一般在实际工作中使用的时候,书写顺序是:select->from->where->group by->having->order by,但是实际的执行顺序是:from->where->group by->having->select->order by(选表->筛选记录->分组->分组后筛选->选列->排序)。

数据分析师之快速掌握SQL基础

数据分析师之快速掌握SQL基础
Stape 7 集合操作
数据分析师之快速掌握SQL基础
 

本阶段学习集合操作,包括表的加减、表的联结。实际工作用多表的联结是很常见的,这里的思维导图列出来的知识点相对比较基础,大家可以在此基础上查阅相应的资料进行补充学习。

数据分析师之快速掌握SQL基础

 

SQL 的掌握重在实践,多在实际操作中使用,不必死记硬背语法和函数,把它当做一个工具箱,遇到问题的时候打开工具箱取出相应的工具来解决具体的问题,而打开工具箱的方式多种多样-记忆力超群的你各种函数了然于胸、借助平台提示、搜索引擎搜索等等。

 

-end- 


版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:数据分析师之快速掌握SQL基础
喜欢 (0)

您必须 登录 才能发表评论!