复杂的子查询并加入mysql

时间:2017-04-22 16:55:47

标签: mysql sql

我想在员工数据库中找到拥有最多活跃员工的部门经理的职位,其结构为data structure

SELECT title ,dept_name
FROM titles 
JOIN dept_manager as j ON titles.emp_no = j.emp_no
JOIN (SELECT y.dept_no,EmployeeCount FROM departments as y JOIN ( SELECT 
count(*) as EmployeeCount, dept_no FROM dept_emp WHERE to_date = '9999-01-
01' GROUP BY dept_no ORDER BY EmployeeCount Desc Limit 1) AS n ON y.dept_no 
= n.dept_no )
AS s  ON j.dept_no = s.dept_no limit 1;

这必须是根据它找到它的查询,但它不起作用我会变得困惑,请帮助我

2 个答案:

答案 0 :(得分:0)

首先,您需要每个部门的员工人数:

select de.dept_name, count(*)
from dept_emp de
where de.to_date = '9999-01-01'
group by de.dept_name;

然后,order by count(*) desc limit 1获得员工最多的部门。注意:你没有指定如何处理关系,所以如果有关系,这只会得到一个拥有最多员工的任意部门。

您可以通过加入dept_managertitles轻松扩展此功能。这就是我建议这样做的方式。

答案 1 :(得分:0)

SELECT title,dept_name
from departments as k
join (
SELECT title ,j.dept_no
FROM titles as a
JOIN dept_manager as j ON a.emp_no = j.emp_no
JOIN (SELECT count(*) as EmployeeCount, dept_no 
    FROM dept_emp WHERE to_date = '9999-01-01' 
    GROUP BY dept_no ORDER BY EmployeeCount Desc Limit 1 )
AS s  ON j.dept_no = s.dept_no  limit 1) as j on k.dept_no = j.dept_no;

这是按预期打印输出。