【背景介绍】
在一家知名电商企业的BI部门实习四个多月,岗位为数据分析。日常工作中打交道最多的就是SQL和EXCEL,在实习之前SQL技能只会简单的增删改查语句,第一周实习经理甩了一份业务常见绩效取数的SQL代码给我,三四百行的代码看得头昏眼乱,惊讶到简简单单的SQL也能写出这么长的代码。历经四个多月的取数训练,对SQL的使用技能噌噌噌上了好几个台阶。本文整理一份数据分析中常用的SQL技能,学会这些技能,就能轻松在企业庞大的数据库中随心所欲地取数并计算指标了。
SQL是一种操纵数据库的语言,主要包括增删改查,对于数据分析师来说,一般只要查找数据的,不能对数据库进行增删改,毕竟公司怕你删库跑路,哈哈哈!查找数据代码的语法格式如下:
SELECT columns_name --查找一列或多列,多列之间用逗号隔开
FROM Table --目标表
WHERE condition --过滤条件
GROUP BY columns_name --按列值分组,可以1个或多个列
HAVING condition --分组后的筛选条件,HAVING与WHERE区别在于前者表达式中可包含函数
ORDER BY columns_name --按列排序
LIMIT start, row_count --对结果进行限定,start表示从哪行开始,row_count表示结果行数
【基础用法】
【举个栗子_1】有一张学生表student,包括学生id,姓名,年龄,班级,分数字段,下面用SQL来查找数据吧。
![dc696b1115f8fa6af2646935a88eed82.png](https://i-blog.csdnimg.cn/blog_migrate/58361113f0b66da885c281cc85320597.png)
--查找id,姓名,成绩列
SELECT stu_id,stu_name,grade
FROM student
![b50ba9dc9a10561c106e585345e21dc9.png](https://i-blog.csdnimg.cn/blog_migrate/1312da2a5d013cab4821344a89d5b7ad.png)
--查找成绩大于等于70分的学生id,姓名,成绩列
SELECT stu_id,stu_name,grade
FROM student
WHERE grade >= 70
![d7922ee913f21032a36e8be069ae910a.png](https://i-blog.csdnimg.cn/blog_migrate/230111c1b1a38d14c73e766aca0ed021.png)
--计算班级人数,平均成绩,最高成绩,最低成绩
SELECT class, avg(grade), max(grade), min(grade) as min_grade, count(stu_id)
FROM student
GROUP BY class
![14e3516fe8370d36055c964647660d11.png](https://i-blog.csdnimg.cn/blog_migrate/91578797a0f33553e7187d68edd3574c.png)
计算班级平均成绩用到了GROUP BY语句,同样的class被分为一组,当你使用分组语句时,SELECT语句后面只能出现分组字段和聚合函数,比如这里SELECT语句后面要是有stu_id就会报错。还有这里用到了as 重命名功能,一般使用函数后会重新命名,不然得到的列默认为函数表达式。
--Having语句筛选班级平均分大于60分的班级
SELECT class, avg(grade), max(grade), min(grade) as min_grade, count(stu_id)
FROM student
GROUP BY class
HAVING avg(grade) > 60
![b90302bcb7a30f7d2fce23ae66e924f5.png](https://i-blog.csdnimg.cn/blog_migrate/1ecc28eb04a0ff77a07b3fb930dc0019.png)
--like进行模糊匹配
where name like '陈%' --找出姓陈的人
where name like '%铭%' --找出名字中有铭字的人
where name like '陈_' --找出姓陈且名字为两个字的人
like进行模糊匹配时,%可以匹配任意多个任意字符,_匹配任意一个字符。
【表连接】
表连接是指两张表可以通过相同的关键字段进行连接,包括内连接和外连接,而外连接又包括左外连接、右外连接和全外连接。1)内连接指结果表只包含同时存在两张表中的连接字段;2)左外连接是指既包含内连接的连接字段还包含左表未连接的字段;3)右外连接是指既包