ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

网易数据分析师笔试复盘:SQL窗口函数与业务分析备考指南

2026/8/31 5:15:46 拓冰建站 浏览量
网易数据分析师笔试复盘:SQL窗口函数与业务分析备考指南 网易2020校招数据分析师提前批笔试复盘从题型拆解到备考思路网易2020校招数据分析师提前批的笔试是我整个秋招季里印象最深的一场。不是说题目有多难而是它把“数据分析”这件事拆得很细——SQL、Python、统计、业务分析几乎每一道题都在考察一个具体的工作场景。如果你正准备投数据分析岗无论目标是不是网易这场笔试的备考思路都值得参考。这篇文章我会从题型结构、考点细节、答题策略三个维度把提前批笔试的考察逻辑完整拆一遍也会把我自己踩过的坑一并说出来。适合正在准备校招笔试、尤其是第一次参加互联网大厂数据分析笔试的同学。1. “提前批”三个字里藏着的关键信息批次差异和筛选逻辑1.1 提前批和正式批的区别不只是时间上早了一个月网易的校招批次分得很清楚提前批和正式批是完全独立的两条线。提前批通常是七月底八月初开放投递、八月中下旬笔试面试正式批要等到九月份。很多人觉得提前批就是“试水”“练手”这种心态会害了你。提前批的hc数量往往比正式批少但人才池也小竞争反而更集中通过笔试之后的面试轮次推进速度非常快有的部门甚至笔试完三天就会约一面。更关键的是提前批面试结果会直接进入人才库。如果你提前批挂了正式批还能重新投递但面试官在后台能看到你提前批的笔试成绩和面试评价。笔试成绩如果太难看即使重新投递简历筛选阶段也可能被系统自动降权。所以不存在“随便考考”这回事每道题都要当成正式批来答。1.2 笔试平台与题型分布在线编程和客观题并行网易那年的笔试用的在线平台支持分题型计时整场下来大概两个半小时题量不算小。整体分布大致是客观题选择填空约30分两道SQL编程题约40分一道Python/算法题约10到15分剩余部分是一到两道业务分析问答题。这个分值比例说明一个很重要的结论SQL是绝对的压舱石业务分析题决定你能否进面试而客观题拼的是基础牢不牢。客观题覆盖的范围非常杂统计学、概率论、机器学习基础概念、业务常识都会有。印象比较深的是有几道题涉及到了AB实验的假设检验、置信区间含义、以及常见的指标异动归因这些纯靠刷LeetCode是刷不出来的。提前批笔试里客观题考的是“你平时有没有真正在用数据”而不是“你背了多少公式”。1.3 网易这场笔试的整体气质很“业务导向”如果用一个词概括网易数据分析笔试给我的感觉就是“业务导向”。它不是那种纯粹招程序员的算法笔试也不是只看理论知识的统计考试而是假设你已经是一个在业务团队里干活的数据分析师然后给你安排一堆日常工作场景里的活。比如给你一份用户行为日志表让你统计次日留存给你一个活动页面让你设计一套评估指标体系。这个定位决定了备考方式和刷题方向。只看《统计学习方法》或者只刷力扣都不够必须从“怎么分析业务问题”的角度去准备。我身边不少同学栽在提前批就是因为他们还在用准备开发岗的方式准备数据岗结果笔试里的业务问答题完全不知道怎么下笔。2. SQL实操题写查询不难难在不出错地处理业务细节2.1 窗口函数是高频考点连续登录、留存率、TopN网易笔试的SQL题基本都围绕用户行为数据展开窗口函数几乎是必考的。我印象里那道题的核心是“统计每个用户的连续登录天数”这是非常经典的窗口函数应用场景。解题思路是用开窗函数给每个用户的登录日期排序算出日期和序号的差值因为连续登录的日子里日期减去序号是一个常数然后再按这个差值分组统计。这类题的写法其实很固定WITH t1 AS ( SELECT user_id, login_date, ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_date) AS rn FROM user_login ), t2 AS ( SELECT user_id, login_date, DATE_SUB(login_date, INTERVAL rn DAY) AS diff FROM t1 ) SELECT user_id, MIN(login_date) AS start_date, MAX(login_date) AS end_date, COUNT(*) AS cnt FROM t2 GROUP BY user_id, diff;难点不在思路而在细节。比如登录日期可能有重复直接开窗之前要不要去重比如用户一天多次登录算不算连续业务上必须明确再比如统计“最长连续登录天数”和“连续登录天数大于等于N天的用户数”写法就不一样。这些边界条件笔试不会帮你说明需要你自己判断。2.2 留存率计算从一张表里自己造出“日期差”另一类高频题是留存率。已知用户活跃日期表让你算某一天新增用户之后的次日留存、7日留存。核心是把同一张表做两次自关联一次取新增日期一次取活跃日期然后算日期差的分布。我当时写的核心思路是这样SELECT a.first_date AS first_active_date, COUNT(DISTINCT a.user_id) AS new_users, COUNT(DISTINCT CASE WHEN DATEDIFF(b.active_date, a.first_date) 1 THEN a.user_id END) AS retained_day1, COUNT(DISTINCT CASE WHEN DATEDIFF(b.active_date, a.first_date) 7 THEN a.user_id END) AS retained_day7 FROM ( SELECT user_id, MIN(active_date) AS first_date FROM user_active GROUP BY user_id ) a LEFT JOIN user_active b ON a.user_id b.user_id GROUP BY a.first_date;这里有个容易踩的坑LEFT JOIN之后行数会膨胀如果不加DISTINCT统计出的留存人数会翻倍。笔试现场真的很紧张很多人就是在这里丢的分。建议平时练习时就要养成习惯凡是做关联统计先想清楚一对多会不会造成数据膨胀。2.3 现场写SQL的节奏先写骨架再补边界作为过来人我强烈建议笔试时不要一上来就写完整代码。先写主体逻辑把主查询、分组字段、关联键写出来然后再回头处理去重、空值、时间边界这些细节。因为平台是按测试用例判分的跑通一个用例就有分部分正确也比完全空着强。SQL题的输入表结构一般会在题干附近给出来字段命名都很直白比如user_id、login_time、active_date。先看清日期字段是datetime还是date是字符串还是时间戳这直接决定你要不要做格式转换。我那次就在一个时间戳字段上栽了跟头以为可以直接比较结果平台一直报错浪费了七八分钟。3. Python与统计基础概念都懂笔试题一做就错3.1 Python考的不是语法是pandas处理数据的能力提前批笔试里Python相关的题目比重不大但出现了就几乎是pandas的操作题。给一个用户订单表让你统计每个用户的下单总金额、下单次数、首单时间。这种题用纯Python写循环也能做但效率极低笔试时间不允许。正确姿势是直接groupby配合agg函数import pandas as pd order_summary df.groupby(user_id).agg( total_amount(amount, sum), order_cnt(order_id, count), first_order_time(order_time, min) ).reset_index()看起来简单但有几个细节很容易丢分。一个是groupby之后默认会把分组字段设为索引题目如果要求输出保持user_id作为普通列必须reset_index另一个是count和size的区别count默认忽略NaNsize不忽略业务口径不同结果完全不同。笔试不会明说“请使用count”你需要根据业务含义自己选。3.2 概率统计客观题贝叶斯、期望、AB实验一锅端网易的客观题里概率统计占了很大比重。贝叶斯公式、随机变量的期望与方差、正态分布、假设检验、p值含义、置信区间这些都是高频考点。这类题难在它经常套着业务的外壳出比如题目给你一个用户流失模型流失用户里有80%近30天未登录非流失用户里只有20%近30天未登录整体流失率是10%问已知一个用户近30天未登录他流失的概率是多少。这本质上就是贝叶斯公式设流失为A未登录为BP(A|B) P(B|A)P(A) / P(B)其中P(B)需要全概率公式展开0.8×0.1 0.2×0.9 0.26结果是0.08/0.26约等于30.8%。公式本身很简单但现场容易慌尤其是选项里还有那种“在流失用户中未登录占比80%”的干扰项。建议考前把贝叶斯公式、全概率公式、常见分布期望方差再过一遍不需要复杂推导会用就行。3.3 AB实验相关的坑显著性不等于业务显著性有一道题让我印象很深它问的是一个AB实验跑了三周实验组转化率比对照组高0.2个百分点p值小于0.05但产品负责人决定不上线问最可能的原因是什么。选项有“统计不显著”“样本量不够”“提升幅度太小而运营成本高”等等。这道题的坑在于很多人看到p0.05就默认实验有效忽略了p值只说明差异在统计上显著不代表这个差异在业务上值得投入。0.2个百分点的提升如果对应的开发维护成本很高产品负责人完全有理由选择不上线。这里考察的是分析师对“统计显著”和“业务显著”两个概念的理解也是真实工作里最常见的讨论场景。建议大家备考时一定要把AB实验的完整流程搞清楚包括最小样本量计算、实验周期确定、显著性检验、多重检验问题、增量分析这些不只在笔试里出现面试案例分析也几乎是必问的。4. 业务分析题没有标准答案但有标准的思考路径4.1 指标体系类问题从目标出发去拆解而不是堆指标网易的业务问答题里有一类很典型给一个业务场景让你设计评估指标体系。比如一个内容社区上线了“关注”功能问你怎么评估这个功能的健康度。很多人上来就写DAU、MAU、留存率、使用时长看起来写了很多其实一句都没踩在点上。正确的做法是先明确功能目标再围绕目标拆解行为和结果指标。关注功能的核心目标是让用户通过关注关系获得稳定内容供给从而提升长期留存。基于这个目标指标应该分成三层第一层是结果指标比如关注后30日留存率、关注关系带来的内容消费占比第二层是行为指标比如人均关注数、取关率、关注后的首周活跃天数第三层是体验指标比如关注推荐页点击率、信息流中来自关注作者的内容占比。这样一套拆下来既有逻辑又有业务含义面试官才会觉得你是真的在做数据分析而不是在背指标。4.2 指标异动归因类问题横向纵向都要给出来另一类常见问答题是“某指标突然下跌你如何分析”。网易的题里我遇到的是“某活动页面次日留存突然下降怎么定位原因”。这类题的答题框架其实非常固定但80%的人答不全。我的建议是按照“数据校验→维度拆解→原因假设→验证方案”四步走。第一步先确认数据真实波动排查埋点是否漏报、口径是否变化、是否存在异常值第二步做维度拆解按渠道、城市、设备、版本、新老用户拆分找到下跌集中在哪个细分人群第三步针对重点细分人群提出假设比如某渠道新增用户质量下降、iOS最新版本出现崩溃、活动页面改版导致加载变慢第四步设计验证方案包括拆日志、看崩溃监控、做小流量回滚实验对比。写答案时不能只有思路要尽量写出具体的SQL逻辑或分析表格。比如拆渠道时我可以写SELECT channel, dt, COUNT(DISTINCT user_id) AS active_users, COUNT(DISTINCT CASE WHEN activity_date dt AND today_login_flag 1 THEN user_id END) / COUNT(DISTINCT user_id) AS retention_rate FROM activity_log WHERE dt BETWEEN 2020-08-01 AND 2020-08-10 GROUP BY channel, dt;这种细节的加入会让业务题的可信度高很多也让面试官知道你不仅能说还能动手查。4.3 答题结构先给结论再给分点每一点都要有数据和工具支撑业务问答题的作答区域通常是一个大文本框没有格式限制但判卷人可能只花几十秒扫你的答案。如果整段文字堆在一起即使内容再好也很难被看见。我的习惯是先写简短结论再用“第一/第二/第三”分点展开每一点的结构都是判断→逻辑→具体做法或指标。这样判卷人一眼扫过去就知道你每一条想表达什么。另外要特别注意业务题不需要写太多废话。“要提升用户体验”这种话谁都会说关键是你准备用什么指标定义“体验”用什么方法验证提升。有分析、有方法、有结论这才是数据分析师该有的答案。5. 考场上的时间管理和状态调整那些事后才想明白的事5.1 时间分配客观题不要恋战笔试总时长有限我的惨痛教训是在客观题上耗了太多时间。网易的客观题里有些计算题比如求期望、求方差其实算一算很快但有些概念题选项非常纠结比如“以下关于p值的描述正确的是”四个选项看起来都对这时候就要果断跳。我的策略是客观题每道最多两分钟两分钟没把握就先选一个最像的给计算题和SQL题留出足够时间。SQL题如果完全没思路也别空着把关联键、分组逻辑写出来平台能跑出一部分用例就算赚到。5.2 和平台打交道提前一周适应在线编程环境这一点平时很容易被忽略。很多人习惯在本地IDE里写代码本地跑通了觉得万事大吉结果笔试平台的自动判题环境跟本地不一样比如它不会帮你安装第三方库或者输出格式要求严格少一个空格就判错。建议考前至少提前一周每天用在线笔试平台做一两道SQL题和Python题把平台上数据的读入方式、输出格式、自测用例功能都摸清楚。我那次笔试就遇到一个问题平台要求输出结果列的顺序必须和题目示例一致我本地跑出来完全正确但因为列顺序不同被扣了分。5.3 考后的复盘比分数更重要笔试结束之后第一时间把能记住的题目整理成文档尤其是那些没做出来的、不确定的题。因为网易提前批挂了还有正式批其他公司的笔试也还在后面这种真题记忆是宝贵的复习资料。我考完那晚就把业务分析题的作答思路重写了一遍把它整理成“活动效果评估”和“指标异动归因”两个专题模板后面面的几家公司几乎都用上了效果非常好。6. 最后送你一份可执行的准备清单结合我自己参加网易2020校招提前批笔试的经历如果你现在距离笔试还有两到三周我会建议按下面这个顺序去准备。第一周集中突破SQL窗口函数和经典业务场景写法。连续登录、留存率、复购率、TopN、行列转换每个专题都手写一遍不要复制粘贴。笔试现场没有代码自动补全写SQL的肌肉记忆很重要。第二周查漏补缺统计概率基础和业务分析框架。每天给自己安排一个业务题计时十五分钟动笔写写完自己当面试官打分看看有没有数据校验、维度拆解、假设验证这些环节有没有具体可执行的查询逻辑。最后一周每天用在线笔试平台练一套完整题模拟真实时间和节奏重点练时间分配和心态控制。同时把自己前期整理过的SQL题、业务题模板重新过一遍做到看到题目就能快速反应过来考察的是哪个知识点。笔试题量很大不必追求每一题都完美但每一类题都要有自己的应对套路。提前批的成绩能进面试当然好进不了也别气馁正式批还有机会。你要做的是把这次笔试当成一次免费的实战演练把暴露出来的薄弱点逐项补齐。我自己就是在提前批笔试里发现了SQL基础不扎实的毛病考前一周狂刷了各种窗口函数场景题后面正式批笔试的时候明显顺手很多。准备数据分析师的笔试最重要的不是你背了多少知识而是你能不能像真正坐在工位上的数据分析师一样面对一堆表和指标时知道自己该问什么问题、该查哪张表、该写什么样的查询逻辑。