数据分析面试手册《SQL篇》
前言:在当前的数据分析岗位中,多数人在做着SQL-Boy\SQL-Girl的工作,在数据分析面试中,SQL是必不可少的一环,对于SQL不仅有常见函数用法的考察,更多时候面试官喜欢出一些编程类题目,本文我们来了解一下那些典型的SQL面试题。(文中的问题均以MySQL为例)
简述类题
Q1 :
MySQL排序窗口函数的区别?
考频:🔥🔥🔥🔥
难度:🔥🔥🔥🔥
Q2 :
如何进行MySQL优化?
考频:🔥🔥🔥🔥🔥
难度:🔥🔥🔥🔥
SQL进行优化的方式多种多样,这里列出10种常见方法:
1. 使用select具体字段代替select*
2. 查询结果数量已知时,使用limit限定
3. 尽量避免使用in和not in(可以使用between和exists)
4. 尽量避免使用or(可用union代替)
5. 尽量避免进行null值判断(可用0去填充然后判断)
6. 大表驱动小表(in的时候左大右小,exists左小右大)
7. join的表不宜过多(一般不超过3个)
8. 先缩小数据范围,再进行其他操作
9. 针对条件筛选列添加索引
10. 使用group by代替distinct进行去重
Q3 :
MySQL中left join\right join\inner join的区别?
考频:🔥🔥🔥
难度:🔥🔥🔥
编程类题
完成编程题的时候,不要被SQL优化的思维固化,这种题目在保证速度和准确率的基础上再去考虑优化方案。
下面选出的5道题目对应着4种常考的SQL类型:查询类、合并类、排序类、字符串提取类。小伙伴们可以根据题目总结类似题目的解题思想。(更多的题目可以去leetcode了解~)
注:写SQL代码是多数公司必不可少的一环,毕竟实践是检验真理的唯一标准。
Q1 :
第二高的薪水
考频:🔥🔥🔥
难度:🔥🔥🔥
题目
示例
输出
答案
select ifnull((
select distinct salary
from Employee
order by salary Desc limit 1,1),null)
as
SecondHighestSalary;
解析
Q2 :
上升的温度
考频:🔥🔥🔥
难度:🔥🔥🔥
题目
示例
输出
答案
select u.id
from Weather u, Weather v
where
datediff(u.recordDate,v.recordDate)=1
and
u.Temperature > v.Temperature;
解析
Q3 :
删除重复的电子邮箱
考频:🔥🔥🔥
难度:🔥🔥🔥🔥
题目
示例
输出
答案
delete from person
where id not in (
select id
from
(select min(id) as id
from
person group by email)
as t
)
解析
delete u
from Person u , Person v
where v.id < u.id and u.email = v.email
Q4 :
分数排名
考频:🔥🔥🔥
难度:🔥🔥
题目
示例
输出
答案
select
score,
dense_rank() over(order by Score desc)
as 'rank'
from Scores;
解析
Q5 :
患某种疾病的患者
考频:🔥🔥🔥🔥🔥
难度:🔥🔥🔥
题目
示例
输出
答案
select *
from Patients
where conditions like 'DIAB1%'
or
conditions like '% DIAB1%';
解析