昨天面试,技术问的比较简单,甚至没有问算法。业务的话,应该是我没有过面的主要原因,后续展开分析
#技术:唯一难倒我的是一个sql
##题目:员工表找出每个部门员工年龄最大的两个员工。
在MySQL中,你可以使用窗口函数来查询每个部门年龄最大的两名员工。MySQL 8.0及以上版本支持窗口函数。以下是一个使用`ROW_NUMBER()`和`DENSE_RANK()`窗口函数的示例SQL查询:
SELECT id, name, age, department_id FROM ( SELECT id, name, age, department_id, DENSE_RANK() OVER (PARTITION BY department_id ORDER BY age DESC) AS rank FROM employees ) AS ranked_employees WHERE rank <= 2;
这个查询的逻辑如下:
1. 首先,从`employees`表中选择所有员工的`id`、`name`、`age`和`department_id`。
2. 使用`DENSE_RANK()`窗口函数为每个部门的员工按年龄降序分配一个排名(`rank`)。`DENSE_RANK()`函数会给具有相同年龄的员工分配相同的排名,并且排名不会跳过任何数字。
3. 外层查询通过子查询创建了一个名为`ranked_employees`的临时表,这个表包含了原始`employees`表的所有列以及新添加的排名列。
4. 最后,外层查询通过`WHERE`子句筛选出每个部门排名前两名的员工(`rank <= 2`)。
这个查询将返回每个部门年龄最大的两名员工的详细信息。如果你只需要特定的信息,比如只需要员工的姓名和部门,你可以相应地调整`SELECT`子句中的字段。
请注意,这个查询假设`employees`表中的`age`列是唯一的。如果有员工年龄相同,`DENSE_RANK()`函数会给他们相同的排名,这样每个部门可能会有超过两名员工被选出。如果你希望在年龄相同的情况下进一步筛选,你可能需要添加额外的条件来决定哪些员工被包括在内。
标签:窗口,函数,employees,RANK,员工,面试,DENSE,查询,id From: https://www.cnblogs.com/jin-wen-xin/p/18132560