用sql实现:"找到满足如下条件的员工: 1.作为某个员工的上级领导的员工 查询的结果应该包括以下属性: 1.员工名字 2.员工的姓氏 3.员工所在部门的部门名称 4.员工的工资 5.员工所直接领导及间接领导的员工总数(包括自己)。注:A是B的直接领导,B是C的直接领导,则A领导的员工包含B和C, 可以依次一直类推下去,比如steven king是所有的领导,中间可能隔了很多层次。排序要求: 首先按照员工所直接领导及间接领导的员工总数,降序;在此基础上,按照员工的工资升序排序。"
时间: 2024-03-25 13:39:23 浏览: 22
这里提供一种基于递归查询的 SQL 语句实现,可以使用 `WITH RECURSIVE` 关键字:
```
WITH RECURSIVE subordinates AS (
SELECT employee_id, CONCAT(first_name, ' ', last_name) AS full_name, department_name, salary, 1 AS level
FROM employees e JOIN departments d ON e.department_id = d.department_id
WHERE employee_id = ?
UNION ALL
SELECT e.employee_id, CONCAT(e.first_name, ' ', e.last_name) AS full_name, d.department_name, e.salary, level + 1
FROM employees e JOIN departments d ON e.department_id = d.department_id
JOIN subordinates s ON e.manager_id = s.employee_id
)
SELECT full_name, department_name, salary, COUNT(*) AS total_subordinates
FROM subordinates
GROUP BY employee_id, full_name, department_name, salary
ORDER BY total_subordinates DESC, salary ASC;
```
其中,`?` 是要查询的员工的 `employee_id`。这个查询语句会返回符合条件的员工的 `full_name`、`department_name`、`salary` 和 `total_subordinates`。