SQL实际上是数仓岗必须掌握的,无论是哪种常用的sql像mysql、hivesql等等,也是技术面必考的一项
基础的增删改查其实考的最多的还是查,增删改一般都不会考,查的话肯定要掌握的有那些聚合函数、开窗函数、case when等等,建议大家搜一搜比较经典的SQL面试题,我这里举几个例子。
分组排名问题
这个就是面试官想了解一下你是否学过开窗函数,可能学校里没有讲过开窗函数,如果你没有听过可以自行百度一下,就是一种格式的函数,如果了解过排名开窗函数,那这个分组排名肯定也就会了。
连续登录问题
连续登录问题也是比较常见的一种面试题,大概有两种,两种都是对开窗函数的应用
1.连续登录n天
给定一个用户和登陆日期的表,求连续登录天数大于n天的用户
2.连续登录n次
给定一个用户和登录时间(这里是具体的几点几分那种),求连续登录超过n次的用户,与上面的不同是这里不允许两次登录中间有其他人登录
这两个题的答案比较多,最常见的就是用排名窗口函数与原时间做差
求所有学科高于平均分的学生
依旧是窗口函数的应用,给定 学生/学科/分数 表,求每一科都高于科目平均分的学生
一个窗口函数求科目平均分,一个sum + if统计是否所有学科都超过平均分即可
留存率
留存率是一大类问题,不过难度相对大一点,就是求时间间隔内登录的用户比率,或者是用户数量
大家自行查找,一般就是用case when + 自连接 + count统计
行转列,列转行
有的面试官会考这种问题,就是把一个表改成另外一种形式,举例如下
name A B C -> xxx A 1
xxx 1 2 3 -> xxx B 2
xxx 4 5 6 -> xxx C 3
… …
解决的办法就是 聚合函数 + case when (行转列)和 聚合函数 + union (列转行)
暂时想到的可能就这些,当然大家也发现了,那些面试官很喜欢考case when 和窗口函数
大家一定要多加练习,只要熟练了,SQL就不是问题
我推荐大家多刷一刷sql的题,可以去牛客或者LeetCode上刷一刷,有好处的,很有可能就遇到原题了~
今天就分享到这,后续还有面试的其他问题,我会尽快更新的