小满秋招数据分析岗笔试复盘:SQL、Python与业务案例全解析 2023年秋招我报了一家金融背景的科技公司数据分析岗投完简历没几天就收到了小满秋招第一批笔试的链接。说实话很多人对这个岗位的笔试预期就是“考SQL、考Python、考统计学”但这批卷子做下来我发现它更想考察的是你面对一个不清晰问题时的拆解能力。笔试一共分了几个板块覆盖统计学、SQL、Python、Excel和业务案例分析时间看着充裕真要每一道都做得漂亮并不轻松。这篇文章就把我亲身经历的这一批笔试复盘一遍讲讲题型分布、典型题目、答题思路以及我踩过的坑。准备秋招数据分析岗的同学或者想转行做数据分析的人可以直接拿这份复盘当参考。1. 这一批笔试到底在考什么1.1 先搞明白招聘方想要什么样的人很多同学拿到笔试题的第一反应是“我要把语法背熟把模型公式都默写出来”。但你要是真的做过几场数据分析岗的笔试就会发现题目本身并不是为了难倒你而是为了筛选出符合岗位画像的人。从小满这批笔试的题目反推这个岗位要的不是取数工具人而是能独立拉数、能听懂业务需求、能在数据异常时给出排查方向的初级数据分析师。金融科技公司的数据分析岗有一个特点业务侧非常关注风险、转化、留存和成本。所以笔试不会只考“会不会用某个函数”而是会给一个偏业务的场景比如“某个渠道的注册转化率连续下降你怎么分析”。这时候光会写SQL不够你得有业务常识知道漏斗的每一步埋点在哪里知道渠道差异和版本迭代都可能影响转化知道用什么指标去衡量波动的显著性。理解了这层逻辑你再看笔试题就会明白为什么有些题看着简单但给分点那么多。比如一道SQL题表面上是查某个时间范围内的订单量但实际暗含去重、空值处理、日期边界条件、分组维度归类这些细节。每一步都有分最后拼的是你平时写数仓查询时有没有养成好习惯。1.2 题型构成和大致分值分布我回忆了一下小满秋招第一批笔试的在线测评大概持续两个半小时题量不算特别大但每道题都需要动笔推演。整体可以分成四个板块。板块考察内容大致占比我的体感难度综合行测与逻辑资料分析、图形推理、文字理解25%中等关键是速度统计学与业务选择题假设检验、置信区间、辛普森悖论、业务指标辨析25%中等偏上SQL与Python编程题数据查询、数据清洗、留存计算、简单统计建模30%较难容易在细节翻车业务案例分析题指标异动排查、AB实验设计、用户分层策略20%主观题但拉分最明显综合行测那一块和公务员考试的资料分析很像但更偏向图表和数据理解。统计学与业务选择题是最容易突击的因为考点固定翻来覆去就是那几十个概念。编程题是重头戏SQL必考Python大概率考pandas和scipy。案例分析题看着最开放其实也有套路后面我会专门展开。1.3 前期知识准备我实际用到的工具清单如果你还有一两周才笔试建议按这个清单去查漏补缺。首先是Excel这是保底工具哪怕你SQL不熟练用数据透视表也能处理不少问题。笔试环境里如果只给一个csv文件Excel反而是最稳的。其次是SQL必考窗口函数、多表join、日期函数、留存计算。再就是Python重点掌握pandas的数据清洗、groupby聚合、merge关联以及scipy的统计检验。我顺手把笔试前用到的一些学习资料列在下面都是市面上好找的Python数据分析与可视化的教程、Excel数据分析实战类的书、SQL面试题合集、商业数据分析的案例库。如果时间紧不用全部啃完优先刷SQL和pandas的基础题。数学建模与数据分析这一块可以放到后期笔试里直接考建模的不多但如果能在案例分析里主动提出用逻辑回归或聚类去做用户分层会很加分。2. 核心题型逐项拆解与避坑思路2.1 统计学与业务选择题考点集中拼的是概念清晰这批笔试题里统计学选择题大概有十道左右考得很集中都是基础概念。比如p值的含义置信区间和样本量的关系中心极限定理的适用条件第一类错误和第二类错误的区别还有相关关系和因果关系的辨析。这些概念在面试里也常考笔试里往往换成一个具体的业务场景让你判断。举个例子有一道题大概是说某活动页面的点击率从5%提升到了6%运营想宣布活动有效问你怎么看。选项里有“需要做显著性检验再下结论”“6%一定大于5%所以有效”“点击率提升但样本量未知无法判断”“应该看用户数而非点击率”。正确的思路是先看样本量和波动范围再决定是否做检验。这道题考的不是计算而是数据分析思维里最基本的一条不能只看数值差异要看差异是否显著。业务选择题还会考一些常用模型的理解比如RFM模型怎么划分用户价值漏斗模型里哪一步流失率最高怎么定位购物篮分析里的支持度和置信度怎么算。如果之前在商业数据分析项目里实际用过这些概念答起来会轻松很多。如果没接触过临时背概念也来得及但一定要把定义和业务含义结合起来理解不要死记公式。2.2 SQL实操题窗口函数是分水岭SQL题是数据分析岗笔试的重头戏小满这批也不例外。基础题无非是select、join、where、group by、order by但只要涉及留存率、连续活跃、排名分组这类场景就必须用到窗口函数。窗口函数和普通group by最大的区别是group by会压缩行数窗口函数不压缩行可以在保留明细的同时计算聚合值。这个特性在做“每个用户在首次下单后的第二个月是否复购”这类问题时就特别好用。我复习时最大的感受是窗口函数不是背几个语法就行关键是理解partition by和order by的执行顺序。很多人写rank()或row_number()时经常忘记在partition里指定分组维度结果算出来的排名是全局排名而不是组内排名这类错误在笔试里特别容易扣分。另外sum() over(partition by ... order by ...)可以实现累计求和这在算某时间点的累计金额时很常用。窗口函数用多了之后你会发现很多常规思路里的“子查询加临时表”都可以被更简洁的窗口函数替代。面试官看你的SQL写法能直接判断你平时是只写业务报表还是真的研究过复杂查询逻辑。想要突击这部分可以去找历年数据分析面试题里的SQL部分把每个题用窗口函数写一遍再用普通写法写一遍对比一下两种思路的差异。2.3 Python编程题pandas清洗和统计检验经常一起出现Python题在这批笔试里不算难但很考察日常使用的熟练程度。有一道题给了一个含有缺失值和重复值的订单表要求用pandas做数据清洗然后统计每个渠道的平均客单价。这种题如果平时总用R或Excel处理数据突然切换到Python环境可能会卡在“缺失值怎么填、重复值按什么字段去重”这些细节上。我的建议是无论题目有没有要求都要把处理过程拆成四步第一步读数据看shape和dtypes第二步处理缺失值先判断是删除还是填充删除要看删除后还剩多少样本填充要用均值、中位数还是前向填充必须给出理由第三步处理重复值一般按订单ID去重但要确定日期和用户ID组合是否唯一第四步分组聚合计算目标指标。每一步都写清楚让面试官看到你的分析思路。如果题目升级到“判断两个渠道的转化率差异是否显著”就要用scipy的ttest或卡方检验。这里有一个很容易踩的坑小样本情况下直接用正态分布近似会出错应该用t检验。另一个坑是数据不是正态分布时要先考虑是否取对数或换用非参数检验。笔试时间有限不要求你写出完整论文式的分析报告但至少要写出关键判断和对应代码。2.4 案例分析题指标异动排查和AB实验是核心案例分析题是这批笔试里最像真实工作场景的部分。题目大概是“某金融产品的申请转化率连续三天下降你作为数据分析师怎么排查原因”。这类题没有标准答案但面试官心里的参考答案基本是一致的先确认数据口径再拆维度再看业务动作最后给出建议。第一步确认数据口径要问清楚转化率的分子分母分别是什么是登录到申请的转化还是申请到审批的转化有没有把测试用户和内部员工排除。第二步拆维度按渠道、设备类型、城市等级、版本号、时段拆分看是全部下降还是某个子群体下降。第三步结合业务动作近期有没有上线新版本、调整投放策略、或者遇到节假日和外部舆情。第四步给出建议如果是某个渠道下降就重点排查渠道流量质量如果是全量下降要考虑策略变更或技术事故。案例分析想拿高分还有一个技巧主动设计AB实验。你可以在回答里说“我可以提出一个AB实验方案把用户随机分流实验组用新策略对照组保持原策略观察核心指标是否显著变化”。这会让面试官觉得你不仅有分析能力还有验证思维。金融风控数据分析岗尤其看重这种能力因为很多策略改动都需要在风险可控的前提下做测试。3. 实操复盘从SQL到Python再回到Excel的完整推演3.1 一道完整SQL题的推演过程笔试编程题里有一道SQL题我记得很清楚因为它综合考了日期函数、去重、join和时间区间判断。题目大概是这样的有两张表用户表user_info包含user_id、注册日期reg_date、注册渠道channel订单表order_info包含order_id、user_id、下单日期order_date、订单金额amount。要求计算2023年1月注册的用户中有多少人在注册后30天内完成了首单并按渠道统计完成率。我当时写的思路是这样的先找出2023年1月注册的用户及其注册渠道再关联订单表但关联时要限定订单日期在注册日期和注册日期加30天之间。这一步的关键是日期加法不同数据库写法不一样MySQL用date_addPostgreSQL用interval笔试环境如果是线上SQL编辑器要先确认数据库类型。然后用order_id去重避免同一个用户下多单被重复计算。最后按渠道分组计算。-- 思路1先过滤注册用户再关联订单计算是否在30天内完成首单 with reg_user as ( select user_id, reg_date, channel from user_info where reg_date 2023-01-01 and reg_date 2023-02-01 ), first_order as ( select user_id, min(order_date) as first_order_date from order_info where user_id in (select user_id from reg_user) group by user_id ) select ru.channel, count(distinct ru.user_id) as reg_cnt, count(distinct fo.user_id) as order_cnt, round(count(distinct fo.user_id) / count(distinct ru.user_id), 4) as order_rate from reg_user ru left join first_order fo on ru.user_id fo.user_id and fo.first_order_date between ru.reg_date and date_add(ru.reg_date, interval 30 day) group by ru.channel;这道题有几个给分点。第一个是“注册后30天内”这个条件必须写在join的on里而不是写在where里否则left join会退化成inner join把没有下单的用户过滤掉。第二个是“首单”必须用min(order_date)聚合不能直接关联全部订单记录否则一个用户下三单会变成三行完成率被虚高。第三个是按渠道分组统计时要用count(distinct)而不是count(*)因为同一个用户可能在订单表里出现多次。实际做题时我还联想到另一种更稳妥的写法先算出每个用户的首单日期再判断是否在30天窗口内最后聚合。这种思路更符合业务逻辑也不容易被日期边界问题干扰。笔试时如果时间充裕我建议写出两种思路哪怕只写一种也要在注释里说明“另一种方法是什么”这会向面试官传递一个信号你能够从多个角度验证数据结果。3.2 Python部分从数据清洗到可视化Python题我印象比较深的是一道数据清洗加可视化的题目。题目给了一个csv文件里面是某产品近三个月的日活跃用户数但数据质量很差日期列有重复、部分数值列是字符串类型、还有几行明显缺失。要求是清洗数据画出日活跃趋势图并指出是否存在异常波动点。我当时的处理步骤是这样的。先用pandas读取打印shape、info、head快速了解数据。看到日期列有重复后用drop_duplicates按日期去重。数值列有字符串比如“1000”和“1,000”混在一起用astype处理前先替换逗号。缺失值不多直接dropna。然后为了看趋势我把日期设成索引按周重采样画折线图。import pandas as pd import matplotlib.pyplot as plt df pd.read_csv(daily_active_users.csv) print(df.shape) print(df.dtypes) print(df.head()) # 清洗去重、替换逗号、转数值、去缺失 df df.drop_duplicates(subset[date]) df[dau] df[dau].astype(str).str.replace(,, , regexFalse) df[dau] pd.to_numeric(df[dau], errorscoerce) df df.dropna(subset[dau]) # 日期处理 df[date] pd.to_datetime(df[date]) df df.sort_values(date) df df.set_index(date) # 重采样后画趋势 df[dau].resample(W).mean().plot(figsize(10, 4)) plt.title(Weekly Average DAU Trend) plt.ylabel(DAU) plt.tight_layout() plt.show()这道题在答完之后我还在注释里写了一句如果某个周均值出现明显下跌需要去核查是否存在埋点漏报、渠道投放暂停或节假日效应。这种注释在真实工作中就是数据分析师会做的事面试官看代码时能看出你是有业务意识的人而不是只会调包。可视化部分如果笔试环境里可以装库matplotlib和seaborn最稳妥。如果需要连接数据库做分析我会用DBeaver查数据因为它支持常用数据库写SQL时有语法提示导出数据方便还能直接生成一些基础图表。日常工作中我经常在DBeaver里跑数然后把结果导出成csv再用Python做深度分析。笔试时如果允许使用这类工具会节省不少时间。3.3 用Excel处理同样问题的保底思路不管笔试环境给不给数据库和Python环境Excel永远是保底方案。我就见过有人在一道SQL题卡住后直接用Excel在本地打开数据文件用数据透视表和vlookup硬生生把结果算出来。虽然步骤笨重一点但至少能拿分。Excel处理数据清洗问题的核心操作无非是删除重复项、查找替换、分列、填充缺失值。比如遇到“1,000”和“1000”混在一起的脏数据用查找替换把逗号去掉或者用分列功能把文本转成数字。日期处理上用text函数统一格式或者用分列里的日期类型转换。要计算每个渠道的订单数只需要插入数据透视表把渠道拖到行标签把订单ID拖到值区域改成计数。整个过程不超过两分钟。Excel的优势在于它所见即所得不需要记函数名。很多人觉得Excel不够高级但在数据分析岗笔试里Excel其实是最不容易出错的工具。尤其是时间紧张的时候用数据透视表快速拿结果再花时间在案例分析题上多写几点整体收益往往更高。笔试不是秀技能的地方拿分才是硬道理。3.4 图表选择思路不是所有数据都适合用柱状图笔试里有一道题是给你一组数据让你选择合适的图表展示。这道题看似送分但很多人会因为不假思索直接选柱状图而丢分。我用实际业务场景梳理一遍时间趋势要用折线图占比结构用饼图或堆叠柱状图数据分布用直方图或箱线图两个变量关系用散点图排名对比用条形图。比如“某渠道DAU连续30天变化趋势”正确的首选是折线图因为它强调时间维度的连续变化。如果画成柱状图视觉上会把连续变化切成分散的时间点不容易看出趋势。再比如“不同渠道的客单价对比”用柱状图就合适因为渠道是分类变量重点是横向比较。如果是“各渠道的转化率分布是否集中”箱线图比柱状图更直观它能看到中位数、四分位距和异常值。这些看起来很简单但恰恰是数据分析笔试里容易被忽略的细节。面试官阅卷时会看你对“为什么选这个图”的解释如果你能写清楚“因为想看分布”或者“因为要强调趋势”就已经超过了大多数人。4. 高频失误、复盘清单和下一步备考方向4.1 我踩过的三个大坑第一个坑是SQL里用了count(*)而不是count(distinct)。有一道题统计某段时间内购买用户数我一开始直接count(order_id)但同一个用户可以下单多次这样就把用户数算多了。现在回想起来这个错误在真实工作里也经常出现统计“用户数”时一定要明确按什么字段去重。第二个坑是Python清洗时没有先看数据类型就做运算。有一列金额是object类型里面有“1,200.00”这样的字符串我直接取均值报错后来才发现要先用str.replace去逗号再转float。这个坑在笔试里浪费了我五分钟如果在真实项目里可能还会导致分析结论错误。第三个坑是案例分析题里没有先问澄清问题就开始写结论。题目说“转化率下降10%请分析原因”我上来就按渠道拆解但没想过口径是否变化也没想过“转化率下降”是相对哪个基准。后来复盘时意识到数据分析师拿到需求第一件事应该是确认口径而不是动手写SQL。这一点在面试里尤其重要因为面试官就是看你有没有这种下意识。4.2 常见问题速查表我把笔试和面试中比较常见的问题整理成一个速查表方便你在考前快速过一遍。问题常见错误正确处理思路统计指标口径不清晰直接按题目字面意思计算先明确分子分母、时间范围、是否去重留存率计算用注册用户数做分母漏看时间窗口按注册时间分组统计后续窗口期活跃用户数缺失值处理一律删除或一律填充先看缺失比例和缺失机制再决定删除或填充窗口函数partition by写错或漏写先想清楚“组内汇总”和“全局汇总”的区别AB实验设计样本量太小、没有做显著性检验先估计样本量再随机分流最后用检验判断指标异动排查直接给结论按“口径—维度—业务动作—实验验证”顺序走图表选择一律柱状图先判断是趋势、分布、对比还是相关关系4.3 不同行业数据分析笔试的侧重点差异复盘完小满这批笔试我又翻了一些其他公司的真题发现不同行业的侧重点差异还挺大。互联网公司更爱考AB实验、用户增长和漏斗分析题目常常给你一组埋点日志让你算转化率。银行系和金融科技公司更偏风控、反欺诈和用户分层SQL题里经常出现历史还款记录和逾期标签。传统零售和制造企业则偏经营分析比如销售额同比环比、库存周转率、ABC分类。所以在准备笔试前先想清楚你投的行业是什么再决定复习重点。金融风控方向重点看特征工程、逻辑回归、评分卡的基本概念还有渠道质量分析。互联网方向重点看A/B test原理、留存曲线和漏斗归因。如果手头时间充足可以找几个数据分析案例库把分析过程完整走一遍比如拉一份订单明细数据自己算客单价、复购率、用户价值分层再输出一份分析报告。这类项目经历写在简历上也很有说服力。另外如果你有多余精力可以了解一点无监督学习在用户分群里的应用比如聚类算法可以把用户分成高价值、潜力、沉默几类。这类知识不一定直接考但在案例分析题的加分项里非常好用。R语言和数据挖掘类工具通常不是笔试的主流但在后续面试中提一句“我熟悉R或Python”会显得知识面更广。4.4 对“小满秋招第一批”这份卷子的整体感受做完小满第一批笔试我的最大感受是它没有刻意刁难人但每一道题都在筛选“真正做过事的人”。SQL题和Python题都偏业务如果只是背语法而没有实际处理过脏数据很容易在细节上卡住。案例分析题更是如此没有标准答案一眼就能看出你是只会背框架还是真的理解业务逻辑。如果你投的是第二批或后面的批次我给的建议是别急着刷新题先把错题重做一遍。像我这样把SQL窗口函数、留存计算、数据清洗、案例拆解这四类题练到几乎不用思考笔试时就会从容很多。数据分析这个岗位考察的本质不是知识量而是你遇到问题时的反应速度和分析习惯。最后分享一点个人的备考体会笔试这东西准备的时候总觉得内容太多题目永远刷不完。但真正考完回头看核心就那几件事SQL能写好窗口函数Python能折腾明白pandasExcel能快速出透视表业务题能按框架不乱套。小满这批笔试给我最大的教训是不要相信“考前突击一个月就能上岸”的错觉数据分析是靠一次次实操喂出来的。每一次用真实数据做清洗、做分析、做图表都是在给笔试积累手感。如果时间允许做一个完整的数据分析项目把数据拿到手、把问题定义清楚、把分析过程写到能给别人看效果比刷十套题都明显。