在数据库的世界里,SQL(结构化查询语言)是与数据库进行交互的主要工具。在面试中,SQL面试题常常考察应试者对SQL的理解和实际应用能力。本文将介绍一个简单但常见的SQL面试题,并给出详细的解答和代码示例。

面试题:查找每个部门的最高工资

假设我们有一个名为 employees 的表,其中包含员工的相关信息,包括员工ID、姓名、部门ID和工资。表结构如下:

CREATE TABLE employees (
    employee_id INT PRIMARY KEY,
    employee_name VARCHAR(100),
    department_id INT,
    salary DECIMAL(10, 2)
);

假设该表中的数据如下:

| employee_id | employee_name | department_id | salary | |-------------|---------------|---------------|---------| | 1 | Alice | 101 | 7000.00 | | 2 | Bob | 101 | 8000.00 | | 3 | Charlie | 102 | 6000.00 | | 4 | David | 102 | 7500.00 | | 5 | Eva | 103 | 9000.00 | | 6 | Frank | 101 | 6000.00 | | 7 | Grace | 103 | 5000.00 |

我们的任务是查找每个部门的最高工资和相应的员工名称。

解题思路

这个问题可以通过使用 GROUP BY 子句和聚合函数 MAX() 来实现。同时,为了获取最高工资对应的员工名称,可以使用 JOIN 语句或者子查询。以下是实现逻辑的步骤:

  1. 使用 GROUP BY 按照 department_id 分组,并获取每个部门的最高工资。
  2. 根据每个部门的最高工资去查找对应的员工名称。

SQL查询示例

以下是采用子查询的方法实现的 SQL 查询示例:

SELECT e.department_id, e.employee_name, e.salary
FROM employees e
WHERE e.salary = (
    SELECT MAX(inner_e.salary)
    FROM employees inner_e
    WHERE inner_e.department_id = e.department_id
);

解析

在这个查询中,我们使用了一个子查询来获取每个部门的最高工资。子查询的逻辑如下:

  • 我们在子查询中选择 MAX(inner_e.salary),并根据 inner_e.department_id 来限制条件,确保我们获取的是当前外部查询 e.department_id 所对应部门的最高工资。
  • 外部查询则用于从 employees 表中获取这些最高工资的对应员工名称。

通过执行上述查询,我们将能得到每个部门的最高工资和该员工的名称。

结果

执行后的结果将会是类似如下的输出:

| department_id | employee_name | salary | |----------------|---------------|---------| | 101 | Bob | 8000.00 | | 102 | David | 7500.00 | | 103 | Eva | 9000.00 |

总结

这个SQL面试题考察了面试者对 SQL 基础知识的掌握,包括聚合函数、分组、子查询等。掌握这些基本操作对于数据库开发和管理至关重要。在面试中,除了要能写出正确的 SQL 语句,还需注意代码的可读性和优化,能够清晰地表达思路也是一个优秀开发者的重要标志。通过不断的练习和学习,我们可以在SQL面试中表现得更加自信和从容。

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部