十二月 21, 2025
20 分钟阅读

初级数据分析师面试题:SQL、Excel 与 BI

interview
career-advice
job-search
entry-level
初级数据分析师面试题:SQL、Excel 与 BI
Milad Bonakdar

Milad Bonakdar

作者

练习初级数据分析师面试题,覆盖 SQL、Excel、仪表板、统计、KPI,以及如何清晰说明数据洞察。


初级数据分析师面试题:应该准备什么

初级数据分析师面试通常会考察你是否能清理杂乱数据、编写基础 SQL、用 Excel 汇总数据、搭建清晰的仪表板,并且不过度复杂地说明业务影响。提前准备简短例子,说明你如何发现问题、检查数据、选择合适指标并解释结果。

本指南聚焦入门级分析岗位最可能遇到的实用问题:Excel 查找函数和数据透视表、SQL 筛选与 JOIN、Tableau 或 Power BI 仪表板、基础统计、KPI,以及与利益相关者沟通。你可以把每个答案作为框架,再补充一个真实项目、课程或实习例子。

如何使用本指南

面试前选定一个数据项目,并把回答和这个项目联系起来。面试官不仅想听你是否知道某个函数或查询,还想知道你什么时候会使用它、如何检查输出,以及如何向非技术团队解释洞察。


Excel 基础 (5 个问题)

1. 对于数据分析来说,最重要的 Excel 函数有哪些?

答案: 每个数据分析师都应该掌握的基本 Excel 函数:

  • VLOOKUP/XLOOKUP: 在表格中查找值
  • IF/IFS: 条件逻辑
  • SUMIF/SUMIFS: 条件求和
  • COUNTIF/COUNTIFS: 条件计数
  • 数据透视表: 汇总和分析数据
  • INDEX/MATCH: 比 VLOOKUP 更灵活
  • TEXT 函数: LEFT、RIGHT、MID、CONCATENATE
  • DATE 函数: TODAY、DATEDIF、EOMONTH
# VLOOKUP 示例
=VLOOKUP(A2, Products!A:C, 3, FALSE)

# SUMIFS 示例 (对 region="East" 且 product="Widget" 的销售额求和)
=SUMIFS(Sales!C:C, Sales!A:A, "East", Sales!B:B, "Widget")

# INDEX/MATCH 示例 (比 VLOOKUP 更灵活)
=INDEX(Prices!C:C, MATCH(A2, Prices!A:A, 0))

# 使用 IF 的条件格式
=IF(B2>1000, "High", IF(B2>500, "Medium", "Low"))

稀有度: 非常常见 难度: 简单


2. 解释 VLOOKUP 和 INDEX/MATCH 之间的区别。

答案:

  • VLOOKUP:
    • 语法更简单
    • 只能向右查找
    • 灵活性较低
    • 对于大型数据集速度较慢
  • INDEX/MATCH:
    • 语法更复杂
    • 可以向左或向右查找
    • 灵活性更高
    • 性能更快
    • 可以返回整个行/列
# VLOOKUP - 在 A 列中查找值,从 C 列返回
=VLOOKUP(A2, A:C, 3, FALSE)

# INDEX/MATCH - 等效但更灵活
=INDEX(C:C, MATCH(A2, A:A, 0))

# INDEX/MATCH 优势:可以向左查找
=INDEX(A:A, MATCH(C2, C:C, 0))  # VLOOKUP 无法做到这一点

稀有度: 非常常见 难度: 简单


3. 如何创建和使用数据透视表?

答案: 数据透视表可以快速汇总大型数据集。

  • 步骤:
    1. 选择数据范围
    2. 插入 → 数据透视表
    3. 将字段拖动到行、列、值
    4. 应用筛选器和格式
  • 用例: 按地区汇总销售额、分析趋势、创建报告
# 数据透视表结构:
行:产品类别
列:季度
值:销售额总和
筛选器:地区

# 数据透视表中的计算字段
利润率 = (收入 - 成本) / 收入

# 分组日期
右键单击日期 → 分组 → 选择月/季度/年

稀有度: 非常常见 难度: 简单


4. 什么是条件格式,你会在什么情况下使用它?

答案: 条件格式根据单元格值应用可视化格式。

  • 用例:
    • 突出显示最高/最低值
    • 显示数据条或颜色刻度
    • 识别重复项
    • 标记异常值
    • 创建热图
# 突出显示大于 1000 的单元格
选择范围 → 条件格式 → 突出显示单元格规则 → 大于

# 颜色刻度(渐变)
选择范围 → 条件格式 → 颜色刻度

# 数据条
选择范围 → 条件格式 → 数据条

# 自定义公式
=AND($B2>1000, $C2="Active")

稀有度: 常见 难度: 简单


5. 如何在 Excel 中删除重复项和处理缺失数据?

答案: 数据清理对于准确的分析至关重要。

# 删除重复项
数据选项卡 → 删除重复项 → 选择列

# 使用条件格式查找重复项
选择范围 → 条件格式 → 突出显示单元格规则 → 重复值

# 处理缺失数据
# 选项 1:筛选和删除
筛选列 → 取消选中(空白)→ 删除可见行

# 选项 2:用平均值填充
=IF(ISBLANK(A2), AVERAGE(A:A), A2)

# 选项 3:向下填充
选择范围 → Ctrl+D (Windows) 或 Cmd+D (Mac)

# 查找并替换空白
Ctrl+H → 查找内容:(留空)→ 替换为:0 或 N/A

稀有度: 非常常见 难度: 简单


SQL 基础 (5 个问题)

6. 编写一个 SQL 查询来选择表中的所有列。

答案: 基本的 SELECT 语句从表中检索数据。

-- 选择所有列
SELECT * FROM employees;

-- 选择特定列
SELECT first_name, last_name, salary
FROM employees;

-- 使用别名选择
SELECT 
    first_name AS "First Name",
    last_name AS "Last Name",
    salary AS "Annual Salary"
FROM employees;

-- 选择不同的值
SELECT DISTINCT department
FROM employees;

-- 限制结果
SELECT * FROM employees
LIMIT 10;

稀有度: 非常常见 难度: 简单


7. 如何使用 WHERE 子句过滤数据?

答案: WHERE 子句根据条件过滤行。

-- 简单条件
SELECT * FROM employees
WHERE salary > 50000;

-- 带有 AND 的多个条件
SELECT * FROM employees
WHERE department = 'Sales' AND salary > 60000;

-- 带有 OR 的多个条件
SELECT * FROM employees
WHERE department = 'Sales' OR department = 'Marketing';

-- IN 运算符
SELECT * FROM employees
WHERE department IN ('Sales', 'Marketing', 'IT');

-- BETWEEN 运算符
SELECT * FROM employees
WHERE salary BETWEEN 50000 AND 80000;

-- LIKE 运算符(模式匹配)
SELECT * FROM employees
WHERE first_name LIKE 'J%';  -- 以 J 开头

-- IS NULL
SELECT * FROM employees
WHERE manager_id IS NULL;

-- NOT 运算符
SELECT * FROM employees
WHERE department NOT IN ('HR', 'Finance');

稀有度: 非常常见 难度: 简单


8. 解释 JOIN 操作及其类型。

答案: JOIN 将来自多个表的数据组合在一起。

  • INNER JOIN: 返回两个表中匹配的行
  • LEFT JOIN: 返回左表中的所有行,以及右表中匹配的行
  • RIGHT JOIN: 返回右表中的所有行,以及左表中匹配的行
  • FULL OUTER JOIN: 返回两个表中的所有行
-- INNER JOIN
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id;

-- LEFT JOIN(所有员工,即使没有部门)
SELECT e.first_name, e.last_name, d.department_name
FROM employees e
LEFT JOIN departments d ON e.department_id = d.department_id;

-- 多个 join
SELECT 
    e.first_name,
    d.department_name,
    l.city
FROM employees e
INNER JOIN departments d ON e.department_id = d.department_id
INNER JOIN locations l ON d.location_id = l.location_id;

-- 自连接(员工及其经理)
SELECT 
    e.first_name AS employee,
    m.first_name AS manager
FROM employees e
LEFT JOIN employees m ON e.manager_id = m.employee_id;

稀有度: 非常常见 难度: 中等


9. 如何使用 GROUP BY 和聚合函数?

答案: GROUP BY 将行分组,聚合函数汇总数据。

-- 按部门计算员工人数
SELECT department, COUNT(*) AS employee_count
FROM employees
GROUP BY department;

-- 按部门计算平均工资
SELECT 
    department,
    AVG(salary) AS avg_salary,
    MIN(salary) AS min_salary,
    MAX(salary) AS max_salary
FROM employees
GROUP BY department;

-- HAVING 子句(过滤组)
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;

-- 多个分组列
SELECT 
    department,
    job_title,
    COUNT(*) AS count,
    AVG(salary) AS avg_salary
FROM employees
GROUP BY department, job_title
ORDER BY department, avg_salary DESC;

-- 常见的聚合函数
-- COUNT, SUM, AVG, MIN, MAX, COUNT(DISTINCT)

稀有度: 非常常见 难度: 中等


10. WHERE 和 HAVING 之间有什么区别?

答案:

  • WHERE: 在分组之前过滤行
  • HAVING: 在分组之后过滤组
  • WHERE: 不能使用聚合函数
  • HAVING: 可以使用聚合函数
-- WHERE - 在分组之前过滤
SELECT department, AVG(salary) AS avg_salary
FROM employees
WHERE salary > 40000  -- 过滤单个行
GROUP BY department;

-- HAVING - 在分组之后过滤
SELECT department, AVG(salary) AS avg_salary
FROM employees
GROUP BY department
HAVING AVG(salary) > 60000;  -- 过滤组

-- 两者一起使用
SELECT department, AVG(salary) AS avg_salary
FROM employees
WHERE hire_date > '2020-01-01'  -- 首先过滤行
GROUP BY department
HAVING COUNT(*) > 5;  -- 然后过滤组

-- 这将是错误的:
-- SELECT department FROM employees
-- WHERE COUNT(*) > 5;  -- 错误:不能在 WHERE 中使用聚合函数

稀有度: 非常常见 难度: 简单


数据可视化 (4 个问题)

11. 有效数据可视化的关键原则是什么?

答案: 好的可视化可以清晰地传达见解。

  • 原则:
    • 选择正确的图表类型(条形图用于比较,折线图用于趋势,饼图用于整体的各个部分)
    • 保持简单(避免杂乱)
    • 使用适当的颜色(一致、易于访问)
    • 清晰地标记(标题、轴、图例)
    • 讲述一个故事(突出显示关键见解)
    • 考虑受众(技术人员与非技术人员)
Loading diagram...

稀有度: 常见 难度: 简单


12. 你什么时候使用条形图,什么时候使用折线图?

答案: 不同的图表类型服务于不同的目的:

  • 条形图:
    • 比较类别
    • 离散数据
    • 示例:按地区销售额、产品比较
  • 折线图:
    • 显示随时间变化的趋势
    • 连续数据
    • 示例:月度收入、股票价格
  • 其他图表:
    • 饼图: 整体的各个部分(谨慎使用)
    • 散点图: 两个变量之间的关系
    • 直方图: 连续数据的分布

稀有度: 常见 难度: 简单


13. 什么是 Tableau,它的主要功能是什么?

答案: Tableau 是一种领先的数据可视化和商业智能工具。

  • 主要功能:
    • 拖放界面(无需编码)
    • 连接到多个数据源(数据库、Excel、云)
    • 交互式仪表板
    • 实时数据更新
    • 计算字段和参数
    • 共享和协作
  • 常见任务:
    • 创建工作表(单个可视化)
    • 构建仪表板(多个可视化)
    • 应用筛选器和参数
    • 创建计算字段
    • 发布到 Tableau Server/Online

稀有度: 非常常见 难度: 简单


14. Tableau 和 Power BI 之间有什么区别?

答案: 两者都可以用于制作报表和仪表板,但面试中更重要的是说明你会如何根据团队和数据环境选择工具。

  • Tableau: 适合灵活的可视化探索、仪表板、计算字段、参数和交互式视图。当主要需求是跨多种数据源做可视化分析时,Tableau 往往更合适。
  • Power BI: 适合 Microsoft 生态,尤其是已经使用 Excel、Fabric、Microsoft 365、Power Query、语义模型和 DAX 的团队。它常用于受治理的报表和周期性业务仪表板。
  • 回答方式: 不要说某个工具永远更好。可以比较受众、现有技术栈、数据模型复杂度、刷新需求、权限和维护责任。

一个好的初级回答是:“基础仪表板我可以用两种工具完成。如果公司主要使用 Microsoft 工作流,我会选 Power BI;如果团队需要更灵活的可视化探索,我会选 Tableau。无论使用哪种工具,我都会先确认业务问题、清理数据、定义指标,并在发布前验证总数。”

统计与分析 (4 个问题)

15. 你知道哪些集中趋势的度量?

答案: 集中趋势的度量描述数据集的中心:

  • 平均值: 平均数(总和/计数)
    • 对异常值敏感
    • 用于正态分布的数据
  • 中位数: 排序后的中间值
    • 对异常值具有鲁棒性
    • 用于偏斜数据
  • 众数: 最频繁的值
    • 用于分类数据
import numpy as np

data = [1, 2, 2, 3, 4, 5, 100]

mean = np.mean(data)  # 16.71 (受异常值 100 影响)
median = np.median(data)  # 3 (不受异常值影响)
# mode = 2 (最频繁)

print(f"Mean: {mean}")
print(f"Median: {median}")

稀有度: 非常常见 难度: 简单


16. 如何识别数据集中的异常值?

答案: 异常值是与其他观测值显着不同的数据点。

  • 方法:
    • 视觉: 箱线图、散点图
    • 统计:
      • IQR 方法(超出 Q1/Q3 1.5 × IQR)
      • Z-score (|z| > 3)
      • 标准差(超出 2-3 个标准差)
import numpy as np

data = np.array([10, 12, 13, 12, 11, 14, 13, 15, 100, 12])

# IQR 方法
Q1 = np.percentile(data, 25)
Q3 = np.percentile(data, 75)
IQR = Q3 - Q1

lower_bound = Q1 - 1.5 * IQR
upper_bound = Q3 + 1.5 * IQR

outliers = data[(data < lower_bound) | (data > upper_bound)]
print(f"Outliers: {outliers}")  # [100]

# Z-score 方法
mean = np.mean(data)
std = np.std(data)
z_scores = np.abs((data - mean) / std)
outliers_z = data[z_scores > 3]
print(f"Outliers (Z-score): {outliers_z}")

稀有度: 常见 难度: 中等


17. 相关性和因果关系之间有什么区别?

答案:

  • 相关性: 变量之间的统计关系
    • 用相关系数衡量(-1 到 1)
    • 并不意味着因果关系
  • 因果关系: 一个变量直接导致另一个变量的变化
    • 需要受控实验
    • 相关性是必要但不充分的条件

例子:

  • 冰淇淋销售额和溺水死亡人数相关(两者都在夏季增加)
  • 但冰淇淋不会导致溺水(混淆变量:温度)
-- 在 SQL 中计算相关性(简化)
SELECT 
    CORR(sales, temperature) AS correlation
FROM daily_data;

-- 正相关:两者一起增加
-- 负相关:一个增加,另一个减少
-- 零相关:没有关系

稀有度: 非常常见 难度: 简单


18. 如何计算百分比变化?

答案: 百分比变化衡量两个值之间的相对变化。

# 公式
百分比变化 = ((新值 - 旧值) / 旧值) × 100

# Excel 公式
=(B2-A2)/A2*100

# 示例:
旧值:100
新值:120
变化:(120-100)/100 = 0.20 = 20% 增加

# 同比增长
=(Sales_2023 - Sales_2022) / Sales_2022 * 100
-- SQL 百分比变化
SELECT 
    year,
    revenue,
    LAG(revenue) OVER (ORDER BY year) AS prev_year_revenue,
    ((revenue - LAG(revenue) OVER (ORDER BY year)) / 
     LAG(revenue) OVER (ORDER BY year) * 100) AS pct_change
FROM annual_sales;

稀有度: 非常常见 难度: 简单


商业智能与报告 (2 个问题)

19. 什么是 KPI,你如何选择正确的 KPI?

答案: KPI(关键绩效指标)是一个可衡量的指标,显示目标实现的有效程度。

  • 良好 KPI 的特征:
    • 具体: 清晰且定义明确
    • 可衡量: 可量化
    • 可实现: 现实
    • 相关: 与业务目标一致
    • 有时限: 有时间范围
  • 示例:
    • 销售: 月度收入、转化率
    • 营销: 客户获取成本、投资回报率
    • 运营: 订单履行时间、错误率
    • 客户: 满意度评分、保留率

稀有度: 常见 难度: 简单


20. 如何向非技术利益相关者展示数据见解?

答案: 有效的沟通对于数据分析师至关重要。

  • 最佳实践:
    • 从结论开始(他们需要知道什么)
    • 使用简单的可视化(避免复杂的图表)
    • 讲述一个故事(背景、见解、建议)
    • 避免行话(解释技术术语)
    • 关注业务影响(收入、成本、效率)
    • 提供可操作的建议
    • 准备好回答问题
  • 结构:
    1. 执行摘要
    2. 主要发现
    3. 支持数据/可视化
    4. 建议
    5. 后续步骤

稀有度: 常见 难度: 中等


Newsletter subscription

真正有效的每周职业建议

将最新见解直接发送到您的收件箱

停止申请,开始被录用

使用全球求职者信赖的AI驱动优化,将您的简历转变为面试磁铁。

免费开始

分享这篇文章

快50%获得工作

使用专业AI增强简历的求职者平均在5周内找到工作,而标准时间是10周。停止等待,开始面试。