01 第一道必杀题:分组取Top N
面试官最爱的题,没有之一。题目长这样:员工表(employee),有部门ID、姓名、工资。要求查出每个部门工资最高的员工。

这道题卡住多少测试工程师?答案是70%以上。原因很简单——大部分人的SQL水平停留在“增删改查”,而这道题需要“窗口函数”。
错在哪里?
新手解法:
面试官看到这个答案,直接给你打上“基础薄弱”的标签。为什么?因为这样只能得到部门ID和最高工资,拿不到员工姓名。面试官真正要的是:每个部门工资最高的那个人的完整信息。
正确解法(窗口函数版):
这里考三个点:
1. 窗口函数 ROW_NUMBER() 的用法
2. PARTITION BY 分组逻辑
3. 子查询嵌套
面试不是考你会不会写,是考你遇到问题能不能拆解。
进阶陷阱
面试官会追问:如果最高工资有两个人并列怎么办?用 ROW_NUMBER() 会随机选一个,这时候要用 DENSE_RANK() 或者 RANK()。
这道题背后考的是:测试人员写SQL不是为了查询,是为了验证数据完整性。比如测试“工资不能超过部门经理”这条规则,你就要能准确找出每个部门的最高工资。
---
02 第二道筛选题:连续登录天数
这道题出现在85%的大厂面试中。题目:用户登录表(user_login),有用户ID和登录日期。要求找出连续登录超过3天的用户。
为什么测试面试必考这道题?因为测试中经常需要验证“连续行为”的逻辑,比如连续签到奖励、连续充值优惠。
核心思想:日期减去行号
这道题考三个能力:
1. 窗口函数 ROW_NUMBER() 配合日期函数
2. 分组聚合的灵活运用
3. 逻辑思维——把连续问题转化为分组问题
面试官的真实意图
他不是在考SQL语法,是在考你能否理解业务逻辑。测试中经常遇到“连续失败3次锁定账号”的需求。如果你连连续登录都查不出来,怎么验证连续失败?
写SQL不是为了炫技,是为了验证业务规则是否正确执行。
变种题
面试官会改条件:连续登录天数不要求连续,但要求在一个月内登录超过15天。解法立刻变成:
区别在哪?前者考连续,后者考去重。面试官通过一道题的变化,就能看出你是背答案还是真理解。
---
03 第三道送命题:行列转换
这道题刷掉的测试人员比前两道加起来还多。题目:学生成绩表(score),有姓名、科目、成绩。要求转成:姓名、语文、数学、英语三列。
为什么这么难?
因为大部分测试工程师只写过简单的SELECT,没碰过行转列。而实际工作中,测试报告、数据对比、接口返回结果,全是行列转换的场景。
标准解法(CASE WHEN):
这里考三个关键点:
1. CASE WHEN 条件判断
2. 聚合函数 MAX() 配合分组
3. 理解行转列的本质——把一列的值变成多列
为什么用MAX?
面试官会追问:为什么用MAX而不是SUM?因为每个学生每个科目只有一条记录,用MAX或MIN都能取出那个值。用SUM也可以,但语义不对。这里考的是对聚合函数的理解深度。
进阶:动态列
面试官再追问:如果科目不固定怎么办?这时候需要动态SQL:
这道题背后考的是:测试人员面对不规则数据时,能不能灵活处理。比如接口返回的JSON字段不固定,你怎么验证?
不会行列转换,你连测试数据都组织不好。
---
04 面试官没说的潜规则
三道题背后,面试官真正在考核什么?
第一层:基础能力
能写出SQL,说明你懂数据库。这是底线。连这关都过不了,后面不用聊。
第二层:逻辑思维
这三道题都不是死记硬背能解决的。窗口函数、日期运算、行列转换,每一个都需要理解业务逻辑。面试官想看到的是:你遇到问题能拆解,能一步步推导出答案。
第三层:测试思维
这是最关键的。面试官不会明说,但他心里在对比:这个人写的SQL能不能用来做测试验证?比如:
- ►能不能查出边界数据?
- ►能不能验证业务规则?
- ►能不能定位数据问题?
数据说话
根据千锋教育2024年面试题库统计:
- ►第一道题通过率:28%
- ►第二道题通过率:15%
- ►第三道题通过率:8%
- ►三道全对:不到3%
不是题目难,是准备方向错了。大部分人刷题只刷SELECT * FROM,面试官考的是业务场景。
---
05 实战训练:从面试题到工作场景
面试过了,工作怎么用?这三道题对应三个真实场景。
场景一:数据完整性验证
测试“订单金额不能超过用户余额”规则:
这就是第一道题的变形——分组取Top N变成了分组取异常。
场景二:连续行为测试
测试“连续3次输错密码锁定”:
第二道题的连续登录变成了连续失败。
场景三:数据报表生成
测试“按日统计各渠道新增用户”:
第三道题的行列转换变成日常报表。
面试题的终点,是工作场景的起点。
---
三道题,刷掉80%的面试者。不是因为题难,是因为大部分人只背答案不思考。SQL不是语法,是工具。工具的价值在于你用它能解决什么问题。
下次面试,面试官扔给你一张表,别急着写代码。先问一句:你要验证什么业务逻辑?
这句话,值一个offer。
京公网安备 11010802030320号