为什么 SQL 是 DS 面试的核心考点?
Data Science 面试中,SQL 的考察比例远超大多数候选人的预期。 根据 Glassdoor 和 LeetCode 的数据统计,Meta DS 面试中 SQL 占技术环节的 40%,Google 的 DS 岗位 SQL 考察比例高达 50%,Amazon 的 Business Intelligence Engineer 和 Data Scientist 岗位几乎每轮都有 SQL 题。
原因很简单:DS 的日常工作 80% 以上都在与数据库打交道——从数据提取、清洗、聚合,到构建分析 Pipeline,SQL 是最核心的工具。面试官需要确认你能在真实业务场景中独立完成数据分析任务。
UK 市场的特殊性:英国的 DS 岗位(尤其是金融科技、银行、咨询等行业)对 SQL 的要求往往比美国更高,因为英国公司的数据基础设施更多依赖传统关系型数据库(PostgreSQL、SQL Server、Oracle),而非 Spark/Hive 等大数据工具。
DS SQL 面试的四大核心题型
题型一:窗口函数(Window Functions)
窗口函数是 DS SQL 面试中最高频的考察点,也是区分初级和高级候选人的关键。几乎所有 Top 10 科技公司的 DS 面试都会考察窗口函数。
核心窗口函数速查表:
| 函数 | 用途 | 典型场景 |
|------|------|----------|
| ROW_NUMBER() | 行号(不重复) | 去重、取 Top N |
| RANK() | 排名(并列跳号) | 成绩排名、销售排行 |
| DENSE_RANK() | 密集排名(并列不跳号) | 薪资分级、用户分层 |
| LAG(col, n) | 取前 n 行的值 | 环比计算、趋势分析 |
| LEAD(col, n) | 取后 n 行的值 | 预测下一步行为 |
| SUM() OVER() | 累计求和 | 累计收入、留存率 |
| AVG() OVER() | 移动平均 | 7 日均线、平滑趋势 |
| NTILE(n) | 分桶(等分) | 用户分位数分析 |
真题示例(Meta DS 面试):给定一张用户登录表 user_logins(user_id, login_date),找出连续登录 7 天及以上的用户。
1WITH ranked AS (
2 SELECT
3 user_id,
4 login_date,
5 ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY login_date) AS rn
6 FROM user_logins
7),
8grouped AS (
9 SELECT
10 user_id,
11 login_date,
12 DATE_SUB(login_date, INTERVAL rn DAY) AS grp
13 FROM ranked
14)
15SELECT user_id, MIN(login_date) AS streak_start, MAX(login_date) AS streak_end, COUNT(*) AS streak_len
16FROM grouped
17GROUP BY user_id, grp
18HAVING COUNT(*) >= 7;解题思路:利用 ROW_NUMBER() 生成行号,通过 login_date - rn 的差值将连续日期映射到同一个 grp 值,再按 grp 分组统计连续天数。
题型二:复杂 JOIN 与数据清洗
JOIN 是 DS 面试中最容易出错的题型,尤其是当涉及多表 JOIN、自连接(Self JOIN)和不等值 JOIN 时。
高频 JOIN 题型:
1. 自连接(Self JOIN):找出薪资高于同部门平均薪资的员工。
1SELECT e.employee_id, e.name, e.salary, dept_avg.avg_salary
2FROM employees e
3JOIN (
4 SELECT department_id, AVG(salary) AS avg_salary
5 FROM employees
6 GROUP BY department_id
7) dept_avg ON e.department_id = dept_avg.department_id
8WHERE e.salary > dept_avg.avg_salary;2. 不等值 JOIN:找出价格在同类商品中排名前 20% 的产品。
1SELECT p1.product_id, p1.category, p1.price
2FROM products p1
3JOIN products p2
4 ON p1.category = p2.category AND p1.price <= p2.price
5GROUP BY p1.product_id, p1.category, p1.price
6HAVING COUNT(p2.product_id) <= 0.2 * (
7 SELECT COUNT(*) FROM products p3 WHERE p3.category = p1.category
8);3. 多表 JOIN 数据清洗:这类题目通常给出 3-4 张表,要求候选人在 JOIN 的同时处理 NULL 值、重复数据和数据类型不一致等问题。面试官考察的不仅是 SQL 语法,更是候选人对数据质量的敏感度。
题型三:CTE 与递归查询
CTE(Common Table Expression) 是现代 SQL 的核心特性,也是 DS 面试中展示代码可读性和结构化思维的重要机会。
- CTE 的核心优势:
- 将复杂查询拆分为可读的逻辑单元
- 避免重复子查询,提升性能
- 支持递归查询(处理层级数据)
真题示例(Google DS 面试):给定一张组织架构表 org_chart(employee_id, manager_id, name),找出 CEO(manager_id 为 NULL)到每个员工的完整汇报链。
1WITH RECURSIVE hierarchy AS (
2 -- 基础情况:CEO
3 SELECT employee_id, manager_id, name, CAST(name AS VARCHAR(1000)) AS path, 0 AS level
4 FROM org_chart
5 WHERE manager_id IS NULL
6
7 UNION ALL
8
9 -- 递归步骤:逐层向下
10 SELECT e.employee_id, e.manager_id, e.name,
11 CONCAT(h.path, ' -> ', e.name) AS path,
12 h.level + 1 AS level
13 FROM org_chart e
14 JOIN hierarchy h ON e.manager_id = h.employee_id
15)
16SELECT * FROM hierarchy ORDER BY level, employee_id;题型四:A/B Test 数据分析 SQL
这是 DS 面试中最贴近实际工作的题型,考察候选人能否用 SQL 完成完整的 A/B Test 分析流程。
典型题目结构:给定实验分配表 experiment(user_id, variant, assignment_date) 和行为数据表 events(user_id, event_type, event_date, revenue),计算实验组和对照组的关键指标(转化率、ARPU、留存率)及统计显著性。
1WITH experiment_users AS (
2 SELECT user_id, variant
3 FROM experiment
4 WHERE assignment_date >= '2026-01-01'
5),
6user_metrics AS (
7 SELECT
8 eu.user_id,
9 eu.variant,
10 COUNT(DISTINCT CASE WHEN e.event_type = 'purchase' THEN e.event_date END) AS purchase_days,
11 SUM(CASE WHEN e.event_type = 'purchase' THEN e.revenue ELSE 0 END) AS total_revenue,
12 MAX(CASE WHEN e.event_type = 'purchase' THEN 1 ELSE 0 END) AS converted
13 FROM experiment_users eu
14 LEFT JOIN events e ON eu.user_id = e.user_id
15 AND e.event_date >= '2026-01-01'
16 GROUP BY eu.user_id, eu.variant
17)
18SELECT
19 variant,
20 COUNT(*) AS user_count,
21 AVG(converted) AS conversion_rate,
22 AVG(total_revenue) AS arpu,
23 SUM(total_revenue) AS total_revenue
24FROM user_metrics
25GROUP BY variant;DS SQL 面试的备考策略
第一阶段(第 1-2 周):夯实基础
重点掌握:GROUP BY + HAVING、多表 JOIN(INNER/LEFT/RIGHT/FULL)、子查询(相关子查询 vs 非相关子查询)、基础聚合函数。推荐资源:LeetCode SQL 题库(Easy + Medium 共 100 题)、Mode Analytics SQL Tutorial。
第二阶段(第 3-4 周):攻克窗口函数
窗口函数是 DS SQL 面试的核心难点,需要专项训练。推荐:LeetCode SQL Hard 题(专注窗口函数类)、StrataScratch 的 DS 专项 SQL 题库(按公司分类,包含 Meta/Google/Amazon 真题)。
第三阶段(第 5-6 周):模拟真实场景
找一个真实数据集(如 Kaggle 的电商数据集),自己设计 A/B Test 分析场景,用 SQL 完成完整的数据分析流程。这个过程能帮助你建立 DS 思维,而不仅仅是 SQL 语法。
备考资源推荐:
| 资源 | 类型 | 适用阶段 | 特点 | |------|------|----------|------| | LeetCode SQL | 题库 | 全阶段 | 覆盖最广,社区解答丰富 | | StrataScratch | 题库 | 中高级 | DS 专项,按公司分类 | | DataLemur | 题库 | 中高级 | 专注 DS/Analytics 场景 | | Mode Analytics | 教程 | 基础 | 免费,可视化友好 | | pgexercises.com | 练习 | 基础 | PostgreSQL 专项 |
AT&T Career Data Science Track 的 SQL 备考支持
我们的 Tech Track(Data Science 方向) 提供系统化的 SQL 面试备考支持,包括:DS SQL 真题题库(200+ 道按公司分类的真题)、一对一 SQL 诊断和提升辅导、A/B Test 数据分析实战训练,以及 Meta/Google/Amazon DS 岗位的完整面试流程模拟。我们的导师均来自 Bloomberg、Meta、Google 等顶级科技公司的 DS 团队,能够提供最真实的 Insider 视角。如需了解详情,请访问 www.attcareer.com/tech 或扫描页面二维码联系我们。
常见问题 · FAQ
DS 面试和 SWE 面试的 SQL 考察有什么区别?+
DS 面试的 SQL 更注重分析思维,题目通常有明确的业务背景(如用户行为分析、A/B Test 结果计算),需要候选人理解业务逻辑后再写 SQL。SWE 面试的 SQL 更偏向数据库设计和查询优化。DS 面试中窗口函数、CTE 的使用频率远高于 SWE 面试。
UK 的 DS 面试和美国有什么不同?+
UK 的 DS 面试(尤其是金融、咨询行业)更注重 SQL 和统计基础,Python/ML 的考察比例相对较低。美国科技大厂(FAANG)的 DS 面试则更偏向 ML 系统设计和产品分析。如果你在英国求职,建议把 60% 的备考时间放在 SQL 和统计上。
LeetCode 上的 SQL 题够用吗?+
LeetCode SQL 题库对于基础和中级备考足够,但对于 DS 专项面试(尤其是 Meta/Google/Amazon 的 DS 岗位),建议补充 StrataScratch 和 DataLemur 的 DS 专项题库,这些平台的题目更贴近真实 DS 面试场景。
Free Resource
免费领取【Tech 求职全套资料包】
包含 CV 模板、面试题库、Networking 模板信及完整的求职 Timeline。已有 1,200+ 学员领取。

