☰
2023春招数据分析岗笔试经验:SQL、Python与业务题全解析
2026/10/9 16:30:57 网站建设 项目流程

春季招聘数据分析岗的笔试,向来是场信息仗。尤其是“第三批”这种时间靠后的批次,很多同学以为岗位少、竞争小,实际恰恰相反——前两批积累的候选人没消化完,第三批往往是补录和急招岗位的混合体,题目难度并不低,筛选反而更狠。我参加的就是2023年度小满春招数据分析岗第三批笔试,整体感受是:考察范围宽、业务场景多、题目设计贴近真实工作流,想靠临时刷题蒙混过关基本没戏。这篇文章把笔试题型、考察逻辑、做题策略、踩坑复盘全部写透,给正在准备数据分析岗校招或实习的同学一个完整参考。

先说清楚这套笔试适合谁看。如果你是准备投递数据分析岗的应届生、转行做数据相关工作的职场新人,或者已经收到笔试通知、想快速了解考察重点的候选人,这篇文章可以直接当备考清单用。内容覆盖SQL、Python、Excel、统计基础、机器学习概念、业务情景题这几大块,全部是真刀真枪考过的东西,不是网上那种“常见面试题集锦”能比的。

我在实际考试中遇到的最大冲击是:题目并不难,但题量大、时间紧,每一道题都在逼你用最短路径拿分。这和平时刷LeetCode、做Kaggle的节奏完全不同。接下来我把整个笔试过程拆开讲,从考察逻辑到具体题型,再到每类题的应对策略,逐步还原现场。

1. 笔试整体设计与考察方向拆解

1.1 这批笔试的定位和筛选逻辑

第三批笔试在整条招聘链路里的定位,用一句话概括就是“快速过滤不合格者,精准锁定可培养者”。和第一批铺开筛选、考基础概念不同,第三批的题目明显更看重实际动手能力和业务理解力,因为这时候HR和业务部门已经对候选人有初步画像了,笔试的目的是验证“你是不是真的能干活的”。

从题型设置能看出这个逻辑。整张卷子大概分四块:SQL实操题、Python/Excel数据处理题、统计与机器学习概念题、业务情景分析题。前两块占了差不多60%的分值,这和很多同学复习时死磕统计公式、机器学习算法的习惯正好相反。我在考场上就发现,SQL和Python的题目都是给一段脏数据、一个业务问题,要求现场写查询或脚本处理数据,考察的是真实工作里天天要用的能力,而不是书本上的理论条条框框。

这里要特别提醒一个容易忽略的点:业务情景题的分值权重比想象中高。往年很多数据分析岗笔试的题就是A/B测试、留存分析、漏斗转化这些固定套路,但这套卷子把业务题放在了最后,题面长、信息量大,乍一看像阅读理解,其实考的是指标拆解和逻辑推导能力。我当时差点因为前面SQL题耗时太多,导致业务题草草作答,这是个很惨痛的教训。

1.2 题型分布与时间分配建议

先给出一份我记忆中的题型分布和分值占比,虽然是回忆版本,但基本能还原现场情况:

题型模块题量建议用时分值占比难度感受
SQL实操题4题40分钟30%中高,涉及多表关联和窗口函数
Python/Excel数据处理3题30分钟25%中等,偏pandas和透视表操作
统计与机器学习概念6题20分钟20%基础但覆盖面广
业务情景分析2大题30分钟25%高,需要完整分析框架

看到这个分布,你可能已经发现了,整场考试120分钟,但SQL和业务题就占了70分钟,这两块是绝对的拿分重点。我的建议很明确:优先保证SQL和业务题,统计概念题靠平时积累快速回答,Python/Excel题控制在30分钟内完成,不要为了追求完美代码浪费太多时间。

注意:不同批次的题型分布可能有微调,比如有的同学反映第三批增加了R语言或SPSS的题目。如果邮件的考试说明里提到了具体工具范围,务必按说明准备,不要只看往年的经验帖。

1.3 答题环境和心态准备

笔试是线上双机位进行,考试系统内置了代码编译器和文本编辑器,可以切到本地IDE写代码再粘贴上去。这听起来挺宽松,但实际操作上有个坑:考试系统的代码编译器语法检查很弱,同样的代码在本地跑通,粘贴上去可能因为缩进或编码问题报错。我当时就遇到一道Python题,本地pandas处理完全正常,贴到系统里跑出了编码错误,被迫临时改用SQL逻辑绕过,浪费了大概8分钟。

关于心态,我的经验是:遇到完全没思路的题直接跳过,先做有把握的,最后回头补。整套笔试的难度曲线不是线性递增的,而是中间穿插高难度的干扰题,千万别被一道题拖死。记住一个核心原则:数据分析岗笔试考的是“在有限时间内用数据解决业务问题”的能力,不是竞赛式的一题定胜负。

2. SQL与数据查询实操题:多表关联和窗口函数是分水岭

2.1 基础查询题的高频考点和通用写法

SQL实操题在整场笔试里分值最高,也是刷人最狠的地方。第一道题通常是送分题,考单表查询和聚合函数。比如给一张订单表,字段包括订单ID、用户ID、下单时间、订单金额、订单状态,然后要求统计每个用户的累计下单金额和订单数量。这类题考察的就是GROUP BY、SUM、COUNT这些基本功,只要平时写过SQL基本都能秒答。

需要注意的点是:题目会故意设置一些数据陷阱,比如用户ID为NULL的记录要剔除、订单状态为“已取消”的记录是否计入、同一天多次下单是否算同一笔等。这些细节如果不仔细看题,很容易写出“看起来对了但实际结果错误”的SQL。我的建议是,写SQL之前先用30秒通读题目条件,把过滤条件和分组维度想清楚再动手,比写完再反复调试要高效得多。

做这类题还有一个经验技巧:写完之后,用自己的话在注释里解释一遍逻辑,比如“先以用户维度聚合订单金额,再过滤掉取消状态”。笔试系统通常会“执行并检查结果”,但业务方人工复核的时候,看到清晰的注释会有加分效果。而且注释本身能帮你发现自己逻辑上的漏洞,相当于多一次自查机会。

2.2 窗口函数与复杂业务场景:从会写到会想

真正拉开差距的是第二道和第三道题,基本都涉及窗口函数。常见的场景有三种:排名、同比环比计算、会话划分。笔试里对排名和同比环比的考察最多,比如给定一张门店日销售表,要求用窗口函数计算每个门店按日期的销售金额排名,以及每一个门店当天的销售额较前一天的增长率。这需要同时掌握ROW_NUMBER、LAG两个窗口函数,还要能嵌套子查询实现多步计算。

我把我当时写的核心SQL结构整理成模板,方便大家直接理解思路:

-- 计算每个门店销售额的日期排名和环比增长率 WITH daily_sales AS ( SELECT store_id, sale_date, SUM(amount) AS total_amount FROM orders WHERE order_status = 'completed' GROUP BY store_id, sale_date ) SELECT store_id, sale_date, total_amount, ROW_NUMBER() OVER ( PARTITION BY store_id ORDER BY total_amount DESC ) AS amount_rank, (total_amount - LAG(total_amount, 1) OVER ( PARTITION BY store_id ORDER BY sale_date )) * 1.0 / NULLIF( LAG(total_amount, 1) OVER ( PARTITION BY store_id ORDER BY sale_date ), 0 ) AS day_over_day_rate FROM daily_sales ORDER BY store_id, sale_date;

这段代码里有个细节值得展开说:计算环比时用NULLIF把分母为0的日期转成NULL,避免除零错误。这种细节不会直接决定你SQL能不能跑通,但决定你SQL能不能在真实业务数据上稳定运行。业务部门看笔试答卷的时候,很看重这种意识,因为真实数据一定比题目数据脏得多。

会话划分的题,比如给一张用户点击日志表,要求把用户连续30分钟内的点击归为一次会话,这个难度会高出不少。核心思路是用LAG计算每条记录与前一条记录的间隔时间,再用SUM函数配合条件判断实现分组标记。这种题在面试中常见,在笔试里遇到确实有压力。我个人觉得,如果时间不够,先把前两问的排名和环比写好,第三问留一个清晰的思路描述,也比空着强。

2.3 我在SQL题上真实踩过的坑

复盘这次笔试,我在SQL部分犯了两个值得写出来的错误。第一个错误是第一道送分题,题目要求剔除订单状态为“已取消”的记录,我用的是WHERE order_status != 'cancelled' OR order_status IS NULL,想着把NULL状态也保留,但由于表里没有NULL状态,这个写法不仅没起作用,还显得逻辑混乱,如果人工复核反而会留下“对业务不敏感”的印象。正确的做法是直接在WHERE里写WHERE order_status = 'completed',明确业务关注的就是已完成订单,简洁清楚。

第二个错误是排名题里用了GROUP BY和窗口函数嵌套,导致分组聚合后再排名的结果和预期不一致。当时想着先按门店聚合,再在结果集上排名,忽略了窗口函数的执行顺序。正确做法是使用CTE先做聚合,再做窗口计算。这个错误让我多花了大概5分钟排查,现在写SQL都习惯先把逻辑拆成多步CTE,每一步验证一次,避免复杂嵌套。

这些坑不是个例,很多同学在看别人的SQL题解时觉得简单,一旦自己动手就各种报错。原因在于:纸上写SQL和实际跑SQL之间存在巨大鸿沟,表结构、字段类型、数据约束都会影响最终结果。准备笔试的时候,最好在本地装好MySQL或者PostgreSQL,用真实数据练手,而不是只在脑子里过逻辑。

3. Python、Excel与业务思维题:数据处理能力才是硬通货

3.1 Python考察重点和pandas快速处理思路

Python题在笔试里占的份额不算最大,但因为它和业务情景题结合紧密,是很多实操薄弱的同学的失分重灾区。今年这批的Python题没有考算法,而是给了一张用户行为表,要求写代码完成几件事:按用户ID去重、对时间字段做格式化、计算每个用户的平均行为间隔、最后按行为类型做透视表。这活脱脱就是数据分析师日常取数、清洗、汇总的工作流。

我的第一反应是用pandas,整体思路是read_excel读入数据以后做类型转换,再用groupby和agg做聚合。这里有一个很重要的工程细节:时间字段的格式化,如果直接用pd.to_datetime,遇到异常格式会直接报错。更稳妥的办法是加errors='coerce'参数,把无法解析的时间变成NaT,后续再做过滤。类似这种容错处理,是笔试评分中区分“熟练工”和“小白”的关键点。

下面是我对这类题的通用处理流程,也是我在笔试中实际采用的套路:

import pandas as pd # 1. 读取数据,先做全量预览 df = pd.read_excel('user_behavior.xlsx') print(df.info()) print(df.head()) # 2. 时间字段统一格式化,并保留原始列便于校验 df['event_time'] = pd.to_datetime(df['event_time'], errors='coerce') df = df.dropna(subset=['event_time']) # 3. 按用户聚合,计算行为间隔 behavior_sorted = df.sort_values(['user_id', 'event_time']) behavior_sorted['prev_time'] = behavior_sorted.groupby('user_id')['event_time'].shift(1) behavior_sorted['interval'] = ( behavior_sorted['event_time'] - behavior_sorted['prev_time'] ).dt.total_seconds() / 60 # 4. 结果透视表 pivot = pd.pivot_table( df, index='user_id', columns='behavior_type', values='event_time', aggfunc='count', fill_value=0 )

这个流程看起来简单,但每个步骤都有优化空间。比如第3步里用shift(1)拿到上一次行为时间,再计算差值,这其实和SQL里的LAG窗口函数是同一个思想。能在笔试中灵活迁移这两种语言的知识点,会让你的答题速度明显提升。

3.2 Excel数据处理题的核心操作和思路延伸

Excel题这次也考了三道小题,难度不大,但操作熟练度要求比较高。题目背景是给一张销售明细表,要求用Excel完成去重统计、条件求和、和创建数据透视表,最后产出“各城市各品类的销售额占比”汇总。对于用过Excel的同学,这属于基本功,但考场上限时操作,就暴露了很多平时不起眼的问题。

我的建议很直接:Excel题别用鼠标点,多用快捷键。比如去重用“数据—删除重复值”就比写公式快;条件求和用SUMIFS;占比这种字段直接在透视表的值字段设置里改成“总计的百分比”,一步就能出结果。这些操作如果平时不熟练,考场上会特别焦虑,因为Excel题和SQL题不一样,本地办公软件版本和考试系统版本可能不同,菜单位置会变。我这次就遇到了Excel版本从2016变成Office 365,界面完全不一样,好在核心功能逻辑没变,只是找按钮多花了两分钟。

Excel题背后真正考察的能力是“对表格数据结构的敏感度”。比如字段名是否规范、数据是否带合并单元格、有没有多余的汇总行,这些都会影响透视表的正确性。笔试题目里一般不会故意设置这些干扰,但真实业务里天天遇到。我习惯拿到Excel题后先按快捷键Ctrl+T把数据区域转成“表”,这样透视表的数据源会自动扩展,后续新增数据也不用重新修改区域。

3.3 业务情景题的答题框架:指标拆解是核心

业务情景题是这套笔试卷子里最考验综合能力的一部分。题面通常是“某App的次日留存率最近两周持续下降,请分析可能原因并给出排查思路”这一类。这种题没有标准答案,但批卷人心里有一套完整的评估框架,你答得有没有条理、能不能落地,他们一眼就能看出来。

我采用的答题框架是“定义问题—拆解指标—定位原因—提出方案—验证效果”,这五步写下来,基本就能覆盖所有业务分析题。具体来说,首先明确“次日留存率”的定义,是取数口径是D1留存还是D0-D1活跃转化;然后按用户维度拆解,是新用户和老用户分别看,还是按不同渠道、不同版本分别看;再按行为维度拆解,比如用户来App是否完成了核心动作、是否有推送触达等。

这里有个容易被忽略的得分点:答题时写出“先核对指标口径是否变化”这句话。因为现实工作中,数据波动最常见的原因就是口径调整,而不是业务真的变差了。我在笔试里就强调了这一点,还补充了一句“需要确认埋点是否有变动”,后来复盘时觉得这个点应该是加分项。但要注意,别为了显得全面就堆砌所有可能原因,要有优先级。最好按“最容易验证、影响面最大”的顺序来排,让阅卷人看到你的分析是有主次的。

4. 统计基础与机器学习概念题:高频考点速查与避坑

4.1 统计推断和A/B测试:理解比背公式更重要

统计基础题在这套卷子里不算难,但覆盖范围很广。我印象比较深的有三题:一道是假设检验里p值的含义;一道是两组样本均值差异显著性的判别方法;还有一道是A/B实验里最小样本量的计算。这些题如果只看网上的面经,很容易背了公式却不懂原理,一旦题目换个问法就懵了。

先说p值的题。题目给了一个场景:新产品推荐算法的点击率比旧算法高0.5个百分点,p值为0.03,问怎么解读。选项里典型干扰项是“有97%的概率新算法优于旧算法”和“新算法效果显著,可以全量上线”。这两个都是错的。p=0.03的含义是,在“新旧算法效果相同”的原假设成立的前提下,观察到当前这么大差异的概率是3%。这个理解必须写清楚,因为它侧面考察了候选人对“统计显著不等于业务显著”的认知。

关于A/B测试的最小样本量,我当时写的是常见的两独立样本比例检验公式,这个公式的核心参数是显著水平、统计功效和最小可检测效应。笔试不需要现场推导,但需要明白样本量和效应值成反比的关系。我当时直接给出结论“如果要检测更小的提升幅度,就需要更大的样本量”,用文字说明比硬套公式更稳妥,因为人工阅卷更容易理解你的思路。

4.2 机器学习常考概念:逻辑回归、树模型、无监督学习

机器学习概念题通常不会让你现场推导公式,但会考察你是否理解模型之间的区别和适用场景。这次的6道题里,有逻辑回归和决策树的选择、过拟合的应对方法、K-Means聚类里K值怎么选、还有一道关于特征工程中哑变量编码的题。

逻辑回归和决策树的选择题,我的思路是分情况判断:如果要模型可解释性,选逻辑回归;如果数据是非线性且特征之间存在复杂交互,选树模型;如果样本量不大,逻辑回归更稳;如果特征维度高且有大量缺失值,XGBoost这类集成树会更省心。在答案里把这些判断标准写全,比只写“选决策树”得分高得多。

关于K-Means的K值选择,最常用的方法是肘部法则和轮廓系数,笔试里写这两个就够。但要注意,K-Means本身对初始质心敏感,而且只适合凸形分布的数据,如果数据分布不规则,要考虑DBSCAN这类密度聚类。从题目设置看,考K-Means其实是想确认你有没有“无监督学习不适合所有场景”的意识。

特征工程那道题相对细,问的是类别变量用LabelEncoder还是OneHotEncoder。答案是:如果类别有顺序关系,比如等级“低中高”,用LabelEncoder;如果是无顺序的类别,比如城市、渠道,用OneHotEncoder,否则模型会给不存在的顺序关系赋予错误含义。这种题没有难度,关键是平时看项目的时候有没有留意过。

4.3 概念题的时间管理:快速判断,不留空白

概念题在整个笔试里分值占比不高,但胜在数量多,做一题就有一题的分。我的策略是:每道题尽量在3分钟内给出结论,哪怕不确定也先写一个思路,而不是留空白。比如有一道题问“逻辑回归中正则化参数C增大时,模型复杂度怎么变”,我当时记混了,但依然写了“C是正则化强度的倒数,C增大会减弱正则化,模型复杂度上升”,逻辑链完整,至少能拿到部分分。

这类题的时间管理核心是:统计和机器学习概念题不要浪费太多时间在犹豫上,宁可快速作答,把省下的时间留给SQL最后一个大题和业务情景题。因为业务题的回报率远高于概念题,一道业务题答好了,顶得上三道概念题的分。

5. 复盘与后续准备建议

5.1 考后趁热打铁的复盘清单

笔试结束之后,立刻复盘比等结果出来再复盘有效得多。我习惯在考完当天把能回忆的题目按记忆写下来,标注哪些题卡壳、哪些题是蒙的、哪些题很有把握。之后对照资料查漏补缺,比海量刷题效率高很多。

这次的复盘清单我分享出来,可以直接参考:

  • SQL题是否全部用了窗口函数?边界条件(NULL、除零、去重)是否考虑清楚?
  • Python题是否做了异常处理?时间字段解析是否加上了errors参数?
  • Excel题是否用了透视表和SUMIFS?是否把数据区域转成了“表”?
  • 统计概念题是否都能清晰解释每个公式的适用条件和限制?
  • 业务情景题是否先定义问题再拆指标?是否给出了可落地的排查优先级和验证方案?

每道题后面标注“会/半会/不会”,然后针对“半会”和“不会”的部分做专项突破。用这个方法,我大概用了一周时间补齐了SQL窗口函数、业务指标拆解和A/B测试原理三块短板。

5.2 给下一批考生的针对性建议

经历过这次笔试,我最想对准备数据分析岗笔试的同学们说一句:不要盲目刷题,要把时间花在“业务+实操”的组合能力上。单纯刷力扣SQL题、背机器学习公式,对笔试的帮助有限,因为真实笔试题会把这些知识塞进业务场景里考,你不但要懂技术,还要知道什么时候用哪个技术。

具体建议有三条。第一条,SQL窗口函数必须熟练到条件反射级别,尤其是LAG、LEAD、ROW_NUMBER、SUM OVER这四种,每天练两道真实业务场景题,不需要题海,但要保证每个函数能独立完整写出来并解释执行顺序。第二条,练一套从脏数据到可视化的完整流程,可以用本地的MySQL配DBeaver或Tableau Public模拟,把数据清洗、聚合、可视化串联起来,这是笔试和面试都绕不开的核心能力。第三条,做业务情景题时多问“然后呢”,也就是永远往前多想一步,提出原因后要能给出验证方法和预期结果,这能明显提升答案的完整度。

最后再说一个实际考试里的个人体会:第三批笔试的容错率很低,因为前两批已经筛掉了一批人,能走到笔试环节的都是有备而来。这时候拼的恰恰是心态和节奏——遇到不熟悉的题别慌,先把能拿的分拿到,再回头啃硬骨头。数据分析这个岗位,说到底考的是你面对一堆不确定信息时,能不能快速理出逻辑、动手验证、得出结论。笔试只是这场长期测试的一个切片而已。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询