Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql SQL查询,返回员工人数超过5人的部门中的员工详细信息_Mysql_Sql - Fatal编程技术网

Mysql SQL查询,返回员工人数超过5人的部门中的员工详细信息

Mysql SQL查询,返回员工人数超过5人的部门中的员工详细信息,mysql,sql,Mysql,Sql,我有下面两张表;我正在尝试创建一个查询,返回拥有5名以上员工的部门中的员工详细信息 Employee{empNo, firstName, lastName, city, street, postCode, sex, dob, nin, dateJoined, deptNo} Department{deptNo, phoneNo, faxNo, city, street, postCode, mgrempNo, startDate} 我可以返回一个简单的列表,其中包含超过5名员工的部门,但我不

我有下面两张表;我正在尝试创建一个查询,返回拥有5名以上员工的部门中的员工详细信息

Employee{empNo, firstName, lastName, city, street, postCode, sex, dob, nin, dateJoined, deptNo}

Department{deptNo, phoneNo, faxNo, city, street, postCode, mgrempNo, startDate}
我可以返回一个简单的列表,其中包含超过5名员工的部门,但我不确定如何将员工详细信息添加到此列表中

如果deptNo是Employee表中的外键,我甚至需要两个表或一个连接吗

我有一种感觉,我需要2个查询(可能的子查询),并以某种方式需要链接它们

希望返回包含employee表中所有列标题的列表


提前感谢您的帮助

试试这个。对于员工人数超过5人的部门中的任何员工,应返回员工中的所有员工信息:

SELECT e.*, d.vol as employeeCount 
FROM Employee e
JOIN (
    SELECT d1.deptNo, count(*) as vol
    FROM Department d1
    JOIN Employee e1 on (d1.deptNo = e1.deptNo)
    GROUP BY d1.deptNo
    HAVING count(*) > 5
) d on (e.deptNo = d.deptNo)

我只想使用窗口函数:

select e.*
from (select e.*,
             count(*) over (partition by deptid) as num_employees
      from employee e
     ) e
where num_employees > 5;
请注意,不需要department表

如果您不想使用窗口函数,还有其他方法,例如:

select e.*
from employee e join
     (select deptid, count(*) as num_employees
      from employee e2
      group by deptid
     ) ed
     on ed.deptid = e.deptid
where num_employees > 5;

欢迎来到SO。请看这对我有用-我只是想了解e1和d1以及vol部分,以便我自己开发-但是语句workede1,d1只是连接查询中使用的别名。你可以在那里用任何东西。别名只是一个方便的标签,您可以使用它简化对表或字段的引用。我使用e1和d1来区分顶级查询中使用的e和d,但这不是必需的。别名通常被看作是这样的:从Employee中取e,但“AS”不是必需的,所以它被省略了很多,您只需将别名直接放在您要取的别名后面。不需要加入
部门
表,因为您不使用该表中的任何信息
其中e1.deptno不为null
就足够了(如果您的数据库没有被对
department
表的不存在的引用破坏)。我没有使用窗口函数,因为这里不清楚SQL的目标版本或风格。例如,mySQL直到8.0才支持窗口函数。如果没有窗口函数,则必须有一个联接才能获取计数,但您是对的,不需要部门,如果您联接到对员工的聚合查询,则性能可能会更高,但我敢打赌,除非这些表真的很大,否则你们永远不会注意到它们之间的区别。我也敢打赌,在某个时候,它们会想从部门获取一些信息。