昨天面試,技術問的比較簡單,甚至沒有問算法。業務的話,應該是我沒有過面的主要原因,後續展開分析
#技術:唯一難倒我的是一個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()`函數會給他們相同的排名,這樣每個部門可能會有超過兩名員工被選出。如果你希望在年齡相同的情況下進一步篩選,你可能需要添加額外的條件來決定哪些員工被包括在內。