数据分析面试必备SQL语句+语法
发布时间:2022-10-08 15:14:17 所属栏目:MsSql教程 来源:
导读: 前些天在网上冲浪的时候看到一个案例咨询,问说世界500强的数据分析要不要去,评论区一片爆炸:“楼主能分享一下文科生怎么转行做数据分析吗??”、“SQL、python这些学起来好痛苦!”我看
|
前些天在网上冲浪的时候看到一个案例咨询,问说世界500强的数据分析要不要去,评论区一片爆炸:“楼主能分享一下文科生怎么转行做数据分析吗??”、“SQL、python这些学起来好痛苦!”我看着屏幕苦笑,数据分析岗位现在的热门程度如果要形容的话,基本就是随便抓一个微博网友都知道这个岗位了。 Anyway,言归正传,数据分析师的招聘JD你们一定不陌生: Mssql基本语句_单片机c语言基本语句_经典sql基本语句大全 可以说,每个数据分析岗都需要会SQL。 我本人曾在滴滴、美团、平安科技的数据分析类岗位实习过,实习期间会大量运用sql进行取数。也参与了2018年的秋招,做过网易、拼多多、新浪等等公司的数据分析笔试题,还是比较了解SQL常考的题目类型的。 写这篇文章是希望帮助还没有实战过SQL的小伙伴、或者了解一些SQL语句,但是担心自己了解的太片面的小伙伴。这篇文章主要介绍的是:如果想要面试数据分析岗位,最优先需要掌握的SQL技能是哪些呢? 读完本文,你能快速知道:(1)除了select 这种基本的语句,我最应该马上掌握的SQL语句和知识是什么?(2)面试中SQL题80%都在考察的语法是什么?(3)这些语法应该怎么使用? 本文将从三大块介绍入门SQL需要掌握的语法和知识,分别是 从一个实习和秋招过来人的角度看,这些知识基本够面试的时候用了,如果本身也在数据分析岗位实习或者实习过,可以在评论区讨论或者补充一些也常常用到的SQL知识,大家一起交流进步~ ps. 本文主要做知识点快速突破,具体的实战练习大家必不可少还是要做! 介绍完了三大块知识后,后续会有常见的SQL面试/笔试题,可以练习和交流~ 经典sql基本语句大全_Mssql基本语句_单片机c语言基本语句 本文对于SQL知识的介绍结构 1. 最基本(选数据) -- 从table_1中选择a这一列select a from table_1 -- table_1中有id,age; table_2中有id,sex。想取出id,age,sex 三列信息-- 将table_1,table_2 根据主键id连接起来select a.id,a.age,b.sex from (select id,age from table_1) a --将select之后的内容存为临时表ajoin (select id, sex from table_2) b --将select之后的内容存为临时表bon a.id =b.id 在这里先介绍一下几种join: (敲重点,很容易问的哦) Mssql基本语句_单片机c语言基本语句_经典sql基本语句大全 join : hive的join默认是inner join,找出左右都可匹配的记录; left join: 左连接,以左表为准,逐条去右表找可匹配字段,如果有多条会逐次列出,如果没有找到则是NULL; Mssql基本语句_经典sql基本语句大全_单片机c语言基本语句 right join:右连接,以右表为准,逐条去左表找可匹配字段,如果有多条会逐次列出,如果没有找到则是NULL; 经典sql基本语句大全_Mssql基本语句_单片机c语言基本语句 full outer join: 全连接,包含两个表的连接结果,如果左表缺失或者右表缺失的数据会填充NULL。 经典sql基本语句大全_单片机c语言基本语句_Mssql基本语句 每种join 都有on ,>join 之前要确保关联键是否去重,是不是刻意保留非去重结果。 -- 不去重,合并两张表的数据select * from (select?id?from?table_1UNION?ALLselect?id?from?table_2)t; union和union all 均基于列合并多张表的数据,所合并的列格式必须完全一致。union的过程中会去重并降低效率,union all 直接追加数据。union 前后是两段select 语句而非结果集。 2. 最常用(更有多重组合) 为方便大家理解每个函数的作用,先建一个表,后面以这个为示例。 单片机c语言基本语句_经典sql基本语句大全_Mssql基本语句 -- 罗列不同的idselect distinct id from table_1 -- 统计不同的id的个数select count(distinct id) from table_1 -- 优化版本的count distinctselect count(*) from(select?distinct?id?from?table_1)?tb distinct 会对结果集去重,对全部选择字段进行去重,并不能针对其中部分字段进行去重。使用count distinct进行去重统计会将reducer数量强制限定为1,而影响效率,因此适合改写为子查询。 -- 统计不同性别(F、M)中,不同的id个数select count(distinct id) from table_1group by sex-- 其它的聚合函数例如:max/min/avg/sum -- 统计最大/最小/平均年龄select max(age), min(age),avg(age) from table_1group by id 聚合函数帮助我们进行基本的数据统计,例如计算最大值、最小值、平均值、总数、求和 -- 统计A公司的男女人数select count(distinct id) from table_1where company = 'A'group?by?sex -- 统计各公司的男性平均年龄,并且仅保留平均年龄30岁以上的公司select company, avg(age) from table_1where sex = 'M'group by companyhaving?avg(age)>30; -- 按年龄全局倒序排序取最年迈的10个人select id,age from table_1 order by age DESC limit 10 -- 收入区间分组select id,(case when CAST(salary as float)<50000 Then '0-5万'when CAST(salary as float)>=50000 and CAST(salary as float)<100000 then '5-10万'when CAST(salary as float) >=100000 and CAST(salary as float)<200000 then '10-20万'when CAST(salary as float)>200000 then '20万以上'else NULL end from table_1; 在这个例子里也穿插了一个CAST的用法,它常用于string/int/double型的转换。 1. concat( A, B...)返回将A和B按顺序连接在一起的字符串,如:concat('foo', 'bar') 返回'foobar' select concat('www','.iteblog','.com') fromiteblog;--得到 www.iteblog.com 2. split(str, regex)用于将string类型数据按regex提取,分隔后转换为array。 -- 以","为分隔符分割字符串,并转化为arraySelect split("1,2,3",",")as value_array from table_1;-- 结合array index,将原始字符串分割为3列select value_array[0],value_array[1],value_array[2] from (select split("1,2,3",",")as value_array from table_1 )t 3. substr(str,0,len) 截取字符串从0位开始的长度为len个字符。 select substr('abcde',3,2) fromiteblog; --?得到cd 3. 基础进阶 -- 按照字段salary倒序编号select *, row_number() over (order by salary desc) as row_num from table_1; -- 按照字段deptid分组后再按照salary倒序编号select *, row_number() over (partition by deptid order by salary desc) as rank from table_1; 经典sql基本语句大全_单片机c语言基本语句_Mssql基本语句 按照depid分组,对salary进行排序(倒序) 除了row_number函数之外,还有两个分组排序函数,分别是rank() 和dense_rank()。 -- 获取income字段的top10%的阈值select percentile(CAST (salary AS int),0.9)) as income_top10p_threshold from table_1; -- 获取income字段的10个百分位点select percentile(CAST (salary AS int),array(0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0)) as income_percentilesfrom table_1; -- 转换为时间数据的格式select to_date("1970-01-01 00:00:00") as start_time from table_1; -- 计算数据到当前时间的天数差 select datediff('2016-12-30','2016-12-29');-- 得到 "1" to_date函数可以把时间的字符串形式转化为时间类型,再进行后续的计算; 4. 常见笔试/面试题 例:有3个表S,C,SC:S(SNO,SNAME)代表(学号,姓名)C(CNO,CNAME,CTEACHER)代表(课号,课名,教师)SC(SNO,CNO,SCGRADE)代表(学号,课号,成绩) 问题:1. 找出没选过“黎明”老师的所有学生姓名。2. 列出2门以上(含2门)不及格学生姓名及平均成绩。3. 既学过1号课程又学过2号课所有学生的姓名。 1. -- 考察条件筛选select sname from s where sno not in( select sno from sc where cno in (select distinct cno from c where cteacher='黎明' )); 2. -- 考察聚合函数,条件筛选select s.sname, avg_grade from sjoin(select sno from sc where scgrade < 60 group by sno having count(*) >= 2) t1on s.sno = t1.snojoin(select sno, avg(scgrade) as avg_grade from sc group by sno ) t2on s.sno = t2.sno; 3. -- 考察筛选、连接select sname from ( select sno from sc where cno = 1) ajoin (select sno from sc where cno = 2) bon?a.sno?=?b.sno 做SQL题的时候注意理解每个题目希望你用的是什么知识点,这样有助于巩固。 当初我学SQL的时候,盯着《SQL必知必会》翻来覆去的看,但是知识点真的比较多Mssql基本语句,也比较零碎。在写这篇文章之前,也看过知乎上关于SQL学习的文章,有的比较广泛而全面,有的则很干货,全部是牛客上的SQL题目的解析。 (编辑:均轻资讯网_我爱站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
站长推荐

