千锋教育-做有情怀、有良心、有品质的职业教育机构

手机站
千锋教育

千锋学习站 | 随时随地免费学

千锋教育

扫一扫进入千锋手机站

当前位置:首页  >  应聘面试  >  软件测试面试题  > 软件测试面试中常见的SQL笔试题汇总_千锋教育

软件测试面试中常见的SQL笔试题汇总_千锋教育

来源:千锋教育
发布人:cli
时间: 2026-07-03 18:46:43 1783075603

01 第一道必杀题:分组取Top N

面试官最爱的题,没有之一。题目长这样:员工表(employee),有部门ID、姓名、工资。要求查出每个部门工资最高的员工。

这道题卡住多少测试工程师?答案是70%以上。原因很简单——大部分人的SQL水平停留在“增删改查”,而这道题需要“窗口函数”。

错在哪里?

新手解法:

sql
SELECT dept_id, MAX(salary) FROM employee GROUP BY dept_id;

面试官看到这个答案,直接给你打上“基础薄弱”的标签。为什么?因为这样只能得到部门ID和最高工资,拿不到员工姓名。面试官真正要的是:每个部门工资最高的那个人的完整信息。

正确解法(窗口函数版):

sql
SELECT * FROM (
    SELECT *, ROW_NUMBER() OVER(PARTITION BY dept_id ORDER BY salary DESC) AS rn
    FROM employee
) t WHERE rn = 1;

这里考三个点:

1. 窗口函数 ROW_NUMBER() 的用法

2. PARTITION BY 分组逻辑

3. 子查询嵌套

面试不是考你会不会写,是考你遇到问题能不能拆解。

进阶陷阱

面试官会追问:如果最高工资有两个人并列怎么办?用 ROW_NUMBER() 会随机选一个,这时候要用 DENSE_RANK() 或者 RANK()。

sql
SELECT * FROM (
    SELECT *, DENSE_RANK() OVER(PARTITION BY dept_id ORDER BY salary DESC) AS rn
    FROM employee
) t WHERE rn = 1;

这道题背后考的是:测试人员写SQL不是为了查询,是为了验证数据完整性。比如测试“工资不能超过部门经理”这条规则,你就要能准确找出每个部门的最高工资。

---

02 第二道筛选题:连续登录天数

这道题出现在85%的大厂面试中。题目:用户登录表(user_login),有用户ID和登录日期。要求找出连续登录超过3天的用户。

为什么测试面试必考这道题?因为测试中经常需要验证“连续行为”的逻辑,比如连续签到奖励、连续充值优惠。

核心思想:日期减去行号

sql
SELECT user_id, MIN(login_date) AS start_date, MAX(login_date) AS end_date, COUNT(*) AS days
FROM (
    SELECT user_id, login_date, 
           DATE_SUB(login_date, INTERVAL ROW_NUMBER() OVER(PARTITION BY user_id ORDER BY login_date) DAY) AS group_id
    FROM user_login
) t
GROUP BY user_id, group_id
HAVING COUNT(*) >= 3;

这道题考三个能力:

1. 窗口函数 ROW_NUMBER() 配合日期函数

2. 分组聚合的灵活运用

3. 逻辑思维——把连续问题转化为分组问题

面试官的真实意图

他不是在考SQL语法,是在考你能否理解业务逻辑。测试中经常遇到“连续失败3次锁定账号”的需求。如果你连连续登录都查不出来,怎么验证连续失败?

写SQL不是为了炫技,是为了验证业务规则是否正确执行。

变种题

面试官会改条件:连续登录天数不要求连续,但要求在一个月内登录超过15天。解法立刻变成:

sql
SELECT user_id, COUNT(DISTINCT login_date) 
FROM user_login 
WHERE login_date BETWEEN '2024-01-01' AND '2024-01-31'
GROUP BY user_id
HAVING COUNT(*) >= 15;

区别在哪?前者考连续,后者考去重。面试官通过一道题的变化,就能看出你是背答案还是真理解。

---

03 第三道送命题:行列转换

这道题刷掉的测试人员比前两道加起来还多。题目:学生成绩表(score),有姓名、科目、成绩。要求转成:姓名、语文、数学、英语三列。

为什么这么难?

因为大部分测试工程师只写过简单的SELECT,没碰过行转列。而实际工作中,测试报告、数据对比、接口返回结果,全是行列转换的场景。

标准解法(CASE WHEN):

sql
SELECT name,
       MAX(CASE WHEN subject = '语文' THEN score ELSE 0 END) AS 语文,
       MAX(CASE WHEN subject = '数学' THEN score ELSE 0 END) AS 数学,
       MAX(CASE WHEN subject = '英语' THEN score ELSE 0 END) AS 英语
FROM score
GROUP BY name;

这里考三个关键点:

1. CASE WHEN 条件判断

2. 聚合函数 MAX() 配合分组

3. 理解行转列的本质——把一列的值变成多列

为什么用MAX?

面试官会追问:为什么用MAX而不是SUM?因为每个学生每个科目只有一条记录,用MAX或MIN都能取出那个值。用SUM也可以,但语义不对。这里考的是对聚合函数的理解深度。

进阶:动态列

面试官再追问:如果科目不固定怎么办?这时候需要动态SQL:

sql
SET @sql = NULL;
SELECT GROUP_CONCAT(DISTINCT CONCAT('MAX(CASE WHEN subject = ''', subject, ''' THEN score ELSE 0 END) AS ', subject))
INTO @sql FROM score;
SET @sql = CONCAT('SELECT name, ', @sql, ' FROM score GROUP BY name');
PREPARE stmt FROM @sql;
EXECUTE stmt;

这道题背后考的是:测试人员面对不规则数据时,能不能灵活处理。比如接口返回的JSON字段不固定,你怎么验证?

不会行列转换,你连测试数据都组织不好。

---

04 面试官没说的潜规则

三道题背后,面试官真正在考核什么?

第一层:基础能力

能写出SQL,说明你懂数据库。这是底线。连这关都过不了,后面不用聊。

第二层:逻辑思维

这三道题都不是死记硬背能解决的。窗口函数、日期运算、行列转换,每一个都需要理解业务逻辑。面试官想看到的是:你遇到问题能拆解,能一步步推导出答案。

第三层:测试思维

这是最关键的。面试官不会明说,但他心里在对比:这个人写的SQL能不能用来做测试验证?比如:

  • ►能不能查出边界数据?
  • ►能不能验证业务规则?
  • ►能不能定位数据问题?

数据说话

根据千锋教育2024年面试题库统计:

  • ►第一道题通过率:28%
  • ►第二道题通过率:15%
  • ►第三道题通过率:8%
  • ►三道全对:不到3%

不是题目难,是准备方向错了。大部分人刷题只刷SELECT * FROM,面试官考的是业务场景。

---

05 实战训练:从面试题到工作场景

面试过了,工作怎么用?这三道题对应三个真实场景。

场景一:数据完整性验证

测试“订单金额不能超过用户余额”规则:

sql
SELECT o.order_id, o.amount, u.balance
FROM orders o
JOIN users u ON o.user_id = u.user_id
WHERE o.amount > u.balance;

这就是第一道题的变形——分组取Top N变成了分组取异常。

场景二:连续行为测试

测试“连续3次输错密码锁定”:

sql
SELECT user_id, COUNT(*) AS fail_count
FROM login_log
WHERE status = 'FAIL'
  AND login_time > DATE_SUB(NOW(), INTERVAL 30 MINUTE)
GROUP BY user_id
HAVING COUNT(*) >= 3;

第二道题的连续登录变成了连续失败。

场景三:数据报表生成

测试“按日统计各渠道新增用户”:

sql
SELECT date, channel,
       SUM(CASE WHEN event = 'register' THEN 1 ELSE 0 END) AS reg_count
FROM event_log
GROUP BY date, channel;

第三道题的行列转换变成日常报表。

面试题的终点,是工作场景的起点。

---

三道题,刷掉80%的面试者。不是因为题难,是因为大部分人只背答案不思考。SQL不是语法,是工具。工具的价值在于你用它能解决什么问题。

下次面试,面试官扔给你一张表,别急着写代码。先问一句:你要验证什么业务逻辑?

这句话,值一个offer。

声明:本站稿件版权均属千锋教育所有,未经许可不得擅自转载。
10年以上业内强师集结,手把手带你蜕变精英
请您保持通讯畅通,专属学习老师24小时内将与您1V1沟通
免费领取
今日已有369人领取成功
刘同学 138****2860 刚刚成功领取
王同学 131****2015 刚刚成功领取
张同学 133****4652 刚刚成功领取
李同学 135****8607 刚刚成功领取
杨同学 132****5667 刚刚成功领取
岳同学 134****6652 刚刚成功领取
梁同学 157****2950 刚刚成功领取
刘同学 189****1015 刚刚成功领取
张同学 155****4678 刚刚成功领取
邹同学 139****2907 刚刚成功领取
董同学 138****2867 刚刚成功领取
周同学 136****3602 刚刚成功领取
相关推荐HOT