
1. 项目概述美团这类大厂的数据分析笔试到底在筛什么人每年秋招季美团的校招数据分析岗笔试题都会被拿出来反复讨论原因倒不是题目难到无从下手而是它考察的东西非常“综合”——既考SQL和Python这种硬功夫又考业务指标拆解和AB实验设计这种软实力。很多人刷了两周LeetCode和牛客题结果一上考场发现题目本身不难难的是在有限时间内把思路表达得完整、清晰、有业务直觉。先把这个岗位的定位聊透。美团的业务线和数据量级决定了数据分析师不是“取数工具人”而是要能围绕外卖、到店、酒旅、出行这些核心场景回答“业务到底发生了什么、为什么发生、接下来该怎么办”。笔试环节一般不会让你真的写一长串生产级代码而是通过开放式业务题和带约束的编程题考察三件事第一你能不能把一个模糊的业务问题转化成可量化的分析框架第二你的SQL和Python基本功是否扎实到能处理真实数据第三你在方案里有没有体现出对业务节奏、成本收益、用户分层这些概念的基本认知。这篇文章不是给你押题也不会把某一年试卷原封不动搬运过来——网上流传的版本本身就零零散散。我更想做的是把这类笔试背后的考察逻辑拆开把典型题型的答题框架、工具栈的底层要求、以及我当年踩过的坑和后来面试别人时发现的共性问题一次性讲清楚。无论你是2026届准备投递还是刚转数据分析想了解大厂标准这篇内容都可以当作一份系统备考的起点。2. 典型题型拆解与答题框架校招笔试内容通常是选择题、SQL题和业务场景题的组合不同批次、不同部门会有差异但整体骨架是稳定的。先把我见过的高频类型罗列一下再逐一展开。2.1 业务指标题从“求一个数”到“解释一个数”这块最常见的出题形式是“某外卖平台近30天订单量环比下降了3%请分析可能原因”。很多人拿到题第一反应是“活动结束了”“天气不好”“竞对发力了”噼里啪啦列一堆猜测看似很全但得分不高。原因是这类题考的是分析框架不是发散联想。一名合格的数据分析师看到指标异常时第一步不是猜原因而是确认数据口径和异常范围——是整体下降还是某个城市下降是日均单量下降还是峰值时段下降是同比口径还是环比口径如果原始数据都不拆开看后面所有归因都是空中楼阁。我建议的答题框架分四步。第一步指标拆解把订单量拆成新客单量、老客复购单量、流失挽回单量先定位是哪个人群出了问题。第二步维度拆解按城市层级、业务线、时段、用户端版本拆开锁定异常集中区域。比如只有一线城市夜宵时段下降那“天气”“政策”这类全局因素就可以先排除。第三步归因验证把候选原因和已有数据对照比如怀疑竞对补贴就看竞对App下载量、用户转移率怀疑供给减少就看活跃商家数、出餐时长变化。第四步给出下一步建议至少提一个可执行的实验方案比如圈定受影响城市做一周的定向优惠券测试用实验数据验证归因结论。这四步走下来阅卷人能清晰看到你的分析链路哪怕最终原因猜得不够准也会认为你具备结构化处理业务问题的能力。2.2 SQL题不考“会不会”而考“快不快、稳不稳”美团的SQL题一般不会超出连接、聚合、窗口函数、子查询、留存计算、连续登录这几个范畴。看2020年流传版本SQL题占的比重不小而且贴近内部真实场景比如“计算每个城市、每个月的订单量以及环比增长率”“统计近30天活跃用户中次日留存人数和留存率”“找出每个品类下销售额排名前3的商品”。这些题放LeetCode里都是Easy到Medium但笔试真正卡人的是两件事。一是题目描述往往带有真实的业务噪声比如“订单表有取消状态字段计算GMV时要排除已取消订单”“用户可能在同一天下多单统计用户数时需去重”。如果你上来就写SELECT COUNT(*)大概率会掉进坑里。二是SQL窗口函数用得是否顺手。算环比增长、算品类排名用LAG和ROW_NUMBER是标准解法如果你只会子查询嵌套或者写半天还得靠自连接时间上很容易不够。我在实际作答时有一个固定习惯先用伪代码在草稿纸上理清逻辑再写正式SQL。比如算留存率我会先明确分母是从某日注册且当日活跃的用户集合分子是这些用户中第二天仍活跃的集合两个集合按用户维度关联后用COUNT(DISTINCT)计数再分组计算比率。先写步骤后写代码不仅自己不容易乱万一真在真实面试里用手写SQL也能让面试官看到清晰思路。2.3 概率统计与业务推理题笔试里的“隐藏重量级”除了SQL和业务题概率统计题也是美团笔试惯用内容。这块常见题型包括贝叶斯公式应用、期望计算、抽样误差判断、假设检验的基本逻辑。比如“某活动页面的点击率为10%现随机抽取200个用户问点击人数超过25人的概率大约是多少”“一个推荐系统把商品曝光给用户用户点击的概率是0.2且每次点击独立求曝光10次至少产生2次点击的期望成本”等。很多非数理背景的同学看到这类题就头疼但从岗位角度看这些恰恰是数据分析师的基本功。你需要能理解“显著差异”为什么可靠也需要能对业务方说清楚“订单上涨了两个点到底是不是实验带来的”。统计学如果只停留在背公式层面遇到题目换个包装就认不出来了。我的建议是备考时不要死记公式而是把每个公式背后的使用条件理清楚。比如中心极限定理告诉你样本量足够大时样本均值的分布近似正态那你就要能回答“多大算足够大”“总体分布偏斜很严重时会怎样”。这些延伸思考能帮你在选择题里快速排除错误选项也能在简答题里展示出你“懂原理而不只是会算”。3. 从笔试看日常工具栈SQL、Python与可视化笔试虽然考的是解题但背后揭示的是美团的真实工作环境。热词里反复出现python数据分析、spark数据分析案例、dbeaver数据分析图表可视化还有dify做数据分析清洗这些都不是巧合——它们拼凑出的正是商业数据分析师日常要和数据打交道的工具链。3.1 SQL是基本功但别只会SELECT *在美团这类体量的公司分析师写SQL的对象往往不是几百行的Excel表而是几亿行、几十GB的分区表。笔试考的SQL语法虽然和线上完全没有区别但它的隐藏要求是你得知道“怎么写才能让任务跑得动”——比如尽量在WHERE里过滤分区而不是在HAVING里筛比如大表关联前先做子查询缩窄数据量比如能用DISTINCT去重时不丢数据、能用GROUP BY聚合就先聚合再关联。这些点笔试未必直接考但如果你在注释里写了一句-- 限定日期分区避免全表扫描阅卷人是看得到的。它传递的信号是这个人有真实处理大数据量的经验意识。反过来如果全文只写了简单的查询就算语法全对也很难和那些“会带着性能意识写SQL”的候选人拉开差距。3.2 Python数据处理是主线建模只是亮点数据分析方向的笔试通常不会考深度学习或复杂机器学习模型重点集中在Pandas、NumPy、Matplotlib/Seaborn这几件套上。笔试选题一般围绕数据清洗缺失值处理、异常值处理、类型转换、分组聚合与透视表、多表合并、简单统计描述和可视化。比如给一张包含订单时间、城市、商家、金额、用户ID的订单表要求统计每周各城市订单总额变化并画出趋势图。大部分用过Pandas的人都能做出来但差距在细节上日期字段是不是解析成了datetime类型排序时是不是先按城市再按周缺失的user_id是按行删除还是填充这些细节会直接影响结果的正确性也决定了在阅卷人眼里你是“会调API”还是“真正理解数据”。这里提一个很容易踩的坑用Pandas做透视表时默认会把所有数值列都聚合如果表里有order_id这种看似数值实则没意义的字段很容易得到一个巨大且毫无意义的汇总值。正确做法是在pivot_table里显式指定values和aggfunc参数只对目标列操作。这种细节点滴积累起来才是真正拉开差距的地方。3.3 可视化与报表笔试之外的隐性加分项笔试环节通常不会要求写可视化代码但美团数据分析岗后续一般会有面试轮面试里很可能会问“你过去有没有独立做过看板或分析报告”。这里我建议你把常用的可视化工具至少掌握熟练企业内部自然是Tableau、Quick BI类的BI工具为主个人分析里用Python的Seaborn和Plotly、开源工具DBeaver做数据探查也很加分。DBeaver的热度上升是有道理的它是一款免费开源的数据库管理工具支持MySQL、PostgreSQL、ClickHouse、Hive等几十种数据源写完SQL可以直接执行结果并做简单图表可视化本地探查数据非常方便。我的日常习惯是先用DBeaver连上数据库快速跑几条SELECT看看数据分布和字段类型再决定后续是用SQL直接出结果还是拉取到Python里做深度分析。笔试虽然不会考这种具体工具但你在简历或面试里能提到类似的探查流程会显得更像一个“日常真的在用数据解决问题的人”而不是只会刷题。4. 实操过程一道“外卖订单留存分析”题的全流程拆解前面讲了框架和工具这里我用一道典型笔试题做一次完整的实操演练。题目是我根据美团2020年前后的常规考点重新组织过的和真题风格接近重点是演示“拿到题以后怎么一步一步推”。4.1 明确题目和数据口径假设题目给出两张表用户注册表字段user_id、reg_date、city和订单表字段order_id、user_id、order_date、amount、status其中status包含‘completed’和‘cancelled’。要求计算2020年1月新增用户的首日、次日、7日留存率以及不同城市的对比。拿到这种题很多人的第一反应是开写。但我建议先花两分钟确认口径。“新增用户”是指当天注册的用户还是当天首次下单的用户如果题目没明确我通常按“注册日”作为新增定义。“留存”的定义是“用户在某日有至少一笔状态为completed的订单”还是“有过任意行为”这里严格应该是“有至少一笔有效订单”同时要在说明里写清楚把statuscancelled的订单排除掉。口径定了后面所有代码才有意义。4.2 从注册表出发生成留存矩阵思路是先用用户注册表生成一个日期维度表包含每个注册日新增用户数再通过左连接把订单表的活跃记录关联进来判断每个用户在注册后第N天是否活跃。不过直接对全表做大连接笔试数据量下没问题真实场景下要考虑用日期分区分步计算。我给一个SQL参考注意窗口函数和条件聚合的使用WITH reg AS ( SELECT user_id, DATE(reg_date) AS reg_day, city FROM user_register WHERE reg_date 2020-01-01 AND reg_date 2020-02-01 ), active AS ( SELECT DISTINCT user_id, DATE(order_date) AS active_day FROM orders WHERE status completed AND order_date 2020-01-01 AND order_date 2020-02-08 ), base AS ( SELECT r.user_id, r.reg_day, r.city, CASE WHEN a.active_day DATE_ADD(r.reg_day, 1) THEN 1 ELSE 0 END AS is_next_day_active, CASE WHEN a.active_day DATE_ADD(r.reg_day, 7) THEN 1 ELSE 0 END AS is_7day_active FROM reg r LEFT JOIN active a ON r.user_id a.user_id AND a.active_day IN (DATE_ADD(r.reg_day, 1), DATE_ADD(r.reg_day, 7)) ) SELECT reg_day, COUNT(*) AS new_users, SUM(is_next_day_active) AS next_day_users, ROUND(SUM(is_next_day_active) / COUNT(*), 4) AS next_day_rate, SUM(is_7day_active) AS day7_users, ROUND(SUM(is_7day_active) / COUNT(*), 4) AS day7_rate FROM base GROUP BY reg_day ORDER BY reg_day;这段SQL的关键点是先用DISTINCT把活跃用户表压缩成“用户日期”粒度避免一个人一天下多单导致后续判断重复计数。然后左连接注册表保留所有新用户用条件聚合判断第1天和第7天是否活跃。最后用SUM(CASE WHEN...)一次性算出留存用户数和留存率不需要多个子查询。如果你用的是Hive或Spark SQLDATE_ADD需要改成DATE_ADD(reg_day, 1)写法Hive里是date_add(reg_day,1)大小写不敏感。如果是在Pandas里复现核心逻辑就是两行reg[reg_day] pd.to_datetime(reg[reg_date]).dt.date active[active_day] pd.to_datetime(active[order_date]).dt.date retention reg.merge(active, onuser_id, howleft) retention[is_next] (retention[active_day] retention[reg_day] pd.Timedelta(days1)).astype(int)这两种语言在同一道题上的映射关系也建议你平时做练习时就开始积累——想清楚同一个问题在不同工具里各怎么写考场上无论题目限定哪种方式都能快速切换到熟悉的形式。4.3 城市维度对比和结果解读在总量留存算出来之后下一步往往需要按城市拆解。美团的核心业务极度依赖本地化运营不同城市的用户结构差异很大一线城市和下沉市场的新客留存曲线可能有完全不同的形态。这部分SQL只需在GROUP BY里加上city但解读时要注意两点第一城市分组的样本量。有的城市可能一天只注册几十个用户算出的留存率波动会非常大这种数据不能直接用来下结论。第二留存率的对比要考虑新用户来源比如某个城市刚好接入了大流量渠道新增用户质量偏低首日留存被拉低不一定代表产品问题。笔试中如果遇到这种场景建议在答案里主动提一句“需要结合分渠道数据进一步确认”这会让阅卷人感觉你不只会跑数还有数据分析师该有的审慎。4.4 这道题的易错点和采分点以我面试候选人的经验这道高频题最容易扣分的地方有三个没排除取消订单口径错误、对注册当天也算“活跃”理解错误算次日留存时不该把当天算进去除非题目专门定义、聚合时用了COUNT(order_id)代替COUNT(DISTINCT user_id)造成重复计数。这三个错误在日常工作中也很常见笔试踩中了基本说明实战经验还欠缺。反过来想拿加分的话可以在答案最后补一段话“本次定义首日留存为注册后第1天有完成订单若按行业惯例改为注册后自然日当天活跃则SQL窗口需相应调整。”这种补充会让阅卷人觉得你思路开阔、对口径敏感哪怕不是满分答案也更容易进入下一轮面试。5. 常见问题与排查技巧笔试备考中你会遇到的那些“坑”这里把我在备考和面试中总结的常见问题整理成表方便你自查。这些问题不只是针对美团凡是数据岗笔试都适用。问题典型表现排查与改进建议SQL子查询嵌套混乱写三层子查询后自己也分不清逻辑先写伪代码用WITH模块拆解留存率基数不清晰算出的留存率忽高忽低明确分子分母写注释标注时间字段类型不一致字符串比较导致日期算错统一用DATE()或CAST转换后再算Python数据清洗时inplace滥用原数据被意外修改无法回溯优先赋值新变量必要时备份原始DataFrame统计检验只看p值忽略了样本量和效应量同时报告置信区间和业务可感知的差异幅度业务题只会列原因没有优先级和验证方案按“拆解-定位-验证-建议”四步走过度依赖一行代码写出很长的链式df.xxx()可读性差分步写加中间变量方便调试这些坑里我想重点展开两个。一是统计检验相关的理解误区。笔试里常会出现“活动上线后点击率从10%提升到11%是否说明活动有效”这类题很多人直接写“有效因为11%大于10%”。但严格来说你得先做显著性检验或者至少考虑流量波动带来的随机性。更好的回答是如果样本量够大11%和10%的差异可能统计显著但业务影响很小这时候还要看成本和收益。这类题目考的不是你会不会算p值而是你有没有“用数据下结论必须谨慎”的觉悟。二是题目没有标准答案但思路有高下。业务开放题不会只有一个正确答案阅卷时看的是你的答法能不能覆盖“问题定义、拆解方法、数据可行性、执行落地”四个层面。如果你能主动提到“这个提法需要先确认XX数据是否可用”“如果不能获取XX我就用YY替代”基本就是高分答案了。6. 备考路线与自检清单从刷题到形成分析直觉最后聊点偏经验的。笔试虽然是一场考试但它真正的分水岭不在“你背了多少题型”而在“你平时有没有真正用数据解决过问题”。我见过很多刷了大量笔试题的同学SQL写得飞快但遇到一个开放业务场景就卡壳也见过一些平时帮导师跑数据、在实习里做过取数与报表的同学虽然没专门刷题但回答起业务题来头头是道因为他们是“真的理解这件事为什么这么做”。所以备考路线我建议分三步走。第一步是把工具基础打牢。SQL窗口函数、多表连接、留存的多种写法、Pandas的groupby、merge、pivot_table这些是硬功夫每天花一小时连续练两周就能见效。刷题时不要把一道题跑通就扔要试着用不同解法做同一道题比如留存题既用SQL又用Python实现一遍对比两种写法的差异和适用场景。这个过程中你会慢慢体会到“口径”和“数据粒度”这两个概念的分量。第二步是积累业务Sense。最好的材料其实就是美团、拼多多、抖音这些公司的公开业务分析文章加上自己的日常消费观察。比如你点外卖时看到一个“满30减12”的券可以想一想这个券的预算怎么分摊、会不会只吸引价格敏感用户、对商家和平台分别有什么影响。这些思考不需要多高深但它能帮你建立“业务问题和技术手段”之间的连接感。笔试里的业务题说到底就是把这种日常观察抽象成可分析的问题。第三步是做几次完整的模拟作答。建议用一套真题或自拟的题目组合严格限定90分钟仿真考场节奏。我的个人建议是做题顺序上先拿SQL题和统计客观题热身再写业务开放题“先易后难”能更快进入状态。同时要练习“看到问题先写框架再填充细节”的习惯不要在细枝末节上死磕一道题。6.1 考前一周的自检清单距离笔试还有一周时你可以用下面这份清单做一次自查窗口函数ROW_NUMBER、LAG、LEAD、SUM() OVER是否能在5分钟内写出一道典型场景题。留存率、复购率、转化率、ARPU的定义和SQL实现是否能立刻默写出来。Pandas缺失值处理、重复值去重、时间序列重采样、多列聚合是否熟练。能否用一句话解释假设检验中的第一类错误和第二类错误并举一个业务例子。能否面对“指标下跌”类问题在10分钟内写出一个包含拆解、定位、验证的完整回答框架。能否说出美团外卖、到店、酒旅、出行至少两条业务线的核心指标并解释为什么这些指标重要。这些自查项看着简单但能全部顺畅完成的人其实不多。如果你发现某一项有卡顿那就是考前最需要补的地方。6.2 笔试以外的竞争力从“会做题”到“会做事”说句实在话笔试只是校招第一关它能帮你拿到面试门票但最终决定拿不拿得到Offer的是面试里展现出来的“解决实际问题的能力”。美团这类公司非常看重候选人和业务方的沟通能力你能否把复杂分析结果用一两句话说清楚能否在需求模糊时主动确认能否对一个不合理的取数需求说“不”并给出替代方案。这些能力在笔试题里很难直接量化但你可以通过答题过程中的“潜台词”来传递。比如SQL题里加注释说明口径业务题里主动写“需要确认XX数据”Python题里注明“此处因数据量较小选择先读入内存再筛选”。这些细节都会让阅卷人下意识觉得这是一名有过实践经历的人。最后分享一个我在实际准备和带人过程中反复验证的小技巧每做完一道笔试题不管对错都花5分钟写一段“这道题考察了什么能力、我卡在哪、下一次怎么避免”。这比盲目做十道新题有效得多。很多同学刷题量大但进步慢就是因为缺少这种复盘环节。笔试是场持久战但备考方式得当的话一个月的时间足够让你从“看到SQL就心慌”变成“给出分析框架不打草稿”。