求职分享丨SQL面试排坑指南

本文分享了SQL面试的常见模式和技巧,包括笔试、现场面试和远程面试的应对策略。强调了理解需求、问问题的重要性,以及工作中常用的查询能力。提供了work backwards、巧用with语句和考虑边缘情况的三个实用建议,并介绍了window函数和不同类型的join在面试中的应用。通过实例展示了SQL在数据分析场景中的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关注小聚,数据分析不迷路

说起SQL,数分岗位的必备技能之一。在面试时总会问到,旨在评估应聘者的技术和解决问题的能力。今天在这篇文章中,小聚将介绍 SQL 面试问题中常见的模式,并提供一些在 SQL 查询中巧妙处理它们的技巧。

sql的能力分为入门,实战两个阶段,具体看你面试的岗位要求的水平。一般SQL分为增,删,改,查四大能力。很多人都以为按这个顺序应该先写增,删,改,但其实往往工作中真正用到的是

sql中的查也就是select语句,语法不难,但是要达到实战的水平,最好还是经过一阵练习,达到遇到一般问题(注意工作中都是一般问题),你可以比较快的写出select查询语句去解决就算有实战能力了。

常见SQL考察方式

❶ 笔试阶段,网上答题。包括PDD,携程,网易在内很多公司都会在笔试的时候来几个SQL作为筛选条件。网上答题的时候很有可能遇到变态的题目……只能多搜搜这些公司在往年笔试时候出题内容,然后进行针对性的准备了。

❷ 现场面试写代码。在面试小红书,网易的时候,面试官也会现场抽出几道SQL题让你写代码。现场写代码不会遇到太难的题目,一般窗口函数排个序可以搞定,再难点也就是求中位数、众数这些。

❸ 远程面试口述语法。像蘑菇街,趣头条,招银网络科技等等,是在远程面试(或者电面)的时候随便问起SQL常见的语法。以经验来看,电面的考察侧重于提问相似函数的不同点,毕竟让你口述一段代码也不现实……

面试小技巧

问问题(前提准备)

要搞定一场 SQL 面试,最重要的是尽量多问问题,获取关于给定任务和数据样本的所有细节。充分理解需求后,接下来你就可以节省很多迭代问题的时间,并且能很好的处理边缘情况。

许多同学经常还没完全理解 SQL 问题或数据集,就直接开始编写解决方案了。之后,等面试官指出他们解决方案中存在的问题后,他们只好反复修改查询。最后,他们在迭代中浪费了很多面试时间,甚至可能到最后都没有找到正确的解决方案。

建议大家在参加 SQL 面试时,就当成是自己在和业务伙伴共事。所以在你提供解决方案之前,应该要针对数据请求了解清楚所有的需求

三个tips

❶ work backwards

在看到面试题目的时候,先想一下你最后要的表是什么样的,primary key是什么,summary stats是什么,然后从已有的表里面如何推到你想要的表。这个步骤建议大家think out loud。面试中最忌讳自己在默默的想,不和面试官交流,你在展现你的思路的时候,既能帮助你更好理清思路,也能保持和面试官的交流。这在上面其实已经提过了。

❷ 巧用with语句

当你的语句超过两个from的时候,整个script就会非常的复杂,所以建议用with语句,每次需要改变primary key的时候都建一个新表,合理命名让你在下一步可以直接用简单的column name

❸ 思考corner case

如果你的表格里有null值,你会怎么处理?根据题目的条件,是不是用别的值代替?如果你的分母可能是0,怎么办?是不是要用safe_divid代替普通的slash/。写完了以后再检查一下有没有丢一些语句或者没有考虑到corner case。

必备知识点

❶ window function

window function在我看来是不改变data的行数的情况下,把group by的一些stats分到了每一行。比如说 sum(revenue) over (partition by country) 就是把每个country的revenue加了一下,行数和原来不变,所有美国的行的这个数据都是美国revenue的总和。常见的window function还有RANK等。在这里着重讲一下RANK()、DENSE_RANK()、ROW_NUMBER()三者排序的不同:

  • RANK()返回的是不持续的编号,例如100, 101, 101, 102返回的编号将是1,2,2,4;

  • DENSE_RANK()返回的是持续的编号,例如100, 101, 101, 102返回的编号是1,2,2,3;

  • ROW_NUMBER()返回的是持续不重复的编号,例如100, 101, 101, 102返回的编号将是1,2,3,4;

 join的区别

一共有5种join语,left, right, inner, full outer, cross join。目的都是一样的,就是用相同的key把两张表的column并起来。

left就是keep所有在左边的数据的行数,无论右边能不能找到对应的key。inner就是只keep两张表共同的key,full outer join就会把两张表所有的行保留。cross joi会把两张表每一行都和另一张表的每一行join,这个计算量非常大,一般要尽量避免。

数据分析场景案例描述

有些公司在判断应聘者的SQL能力时,通过其处理过的数据场景就知道大概是什么水平。

如果没有SQL笔记或者面试官没有问你具体的SQL实现的案例描述。那建议你自己说一下,你使用SQL处理哪些场景。例如,以下比较经典的数据分析场景:

  • 场景一:查询各种数据指标。主要证明你的SQL基本数据,单表查询,多表查询。例如:订单金额大于100的,订单量,会员数。

  • 场景二:计算会员的复购时间。例如:过去半年内,新会员如果有复购的,复购时间分布。

  • 场景三:行列转置的报表场景。例如:会员,日期,金额;转化为:和进列是会员ID,行是月份,指标的销售金额 。

  • 场景四:分析函数。计算会员的排名,计算累计销售等。

如果以上能掌握,基本你的SQL能力能被认为达到基本处理工作没有问题的水平了。

小结

SQL的基本知识点不难,难的是如何灵活运用,怎么结合实际需求,通过花式操作以及层层嵌套得到最终想要的结果~

所以再次强调:在面试期间,一定要保持交流持续进行!!!


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值