Mysql SQL查询,返回员工人数超过5人的部门中的员工详细信息
我有下面两张表;我正在尝试创建一个查询,返回拥有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名员工的部门,但我不
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才支持窗口函数。如果没有窗口函数,则必须有一个联接才能获取计数,但您是对的,不需要部门,如果您联接到对员工的聚合查询,则性能可能会更高,但我敢打赌,除非这些表真的很大,否则你们永远不会注意到它们之间的区别。我也敢打赌,在某个时候,它们会想从部门获取一些信息。