我在数据库中有两个表
和
我需要按以下格式检索每位经理的员工人数
我一直在努力调整另一个问题的答案
SELECT bankNo AS "Bank Number",
COUNT (*) AS "Total Branches"
FROM BankBranch
GROUP BY bankNo
作为
SELECT COUNT (*) AS StaffCount ,
Employee.Name AS Name
FROM Employee, Stafflink
GROUP BY Name
当我看着Group BY时,我想我应该通过Manlink在Stafflink表中进行分组。
此查询的输出如下所示
所以它正确计数但是你可以看到它远远不是我需要的输出。 任何建议将不胜感激。
答案 0 :(得分:3)
您需要加入Employee和Stafflink表。您的FROM子句看起来应如下所示:
FROM Employee INNER JOIN StaffLink ON Employee.ID = StaffLink.ManID
答案 1 :(得分:0)
您必须两次加入Employee表才能获得经理
下的员工摘要select count(*) as StaffCount,Manager.Name
from Employee join Stafflink on employee.Id = StaffLink.EmpId
join Employee as Manager on StaffLink.ManId = Manager.Id
Group by Manager.Name
答案 2 :(得分:0)
假设您想要学习如何在MS Access中使用SQL,建议您如何加入的答案是正确的。但是有一种方法可以使用ACCESS GUI来设计查询,这比学习SQL更简单。
当涉及多个表时使用GUI的关键是要意识到必须在关系管理器中定义表之间的关系。一旦你这样做,设计你所追求的查询是一块蛋糕,只需点击即可。
在您的情况下,棘手的是两个表之间存在两种关系。一个关系将EmpId链接到ID,另一个链接将ManId链接到ID。
但是,如果您想学习SQL,那么这个快捷方式将是一个题外话。
答案 3 :(得分:0)
如果您没有在表格之间指定连接,则将构建所谓的笛卡尔积,即一个表中的每个记录将与另一个表中的每个记录配对。如果一个表中有7个记录而另一个表中有10个记录,则在分组之前将获得70对(即行)。这就解释了为什么每个经理名字的数量为7。
除了加入表之外,我建议你对经理ID进行分组,而不是经理名称。已知经理ID对于每个经理是唯一的,但不是名称。然后,您需要另外对名称进行分组,因为名称位于选择列表中或者对名称应用聚合函数。每个额外的分组都会降低查询速度;因此我更喜欢聚合函数。
SELECT
COUNT(*) AS StaffCount,
FIRST(Manager.Name) AS ManagerName
FROM
Stafflink
INNER JOIN Employee AS Manager
ON StaffLink.ManId = Manager.Id
GROUP BY
StaffLink.ManId
我不知道它是否会带来性能差异,但我更喜欢在StaffLink.ManId
上而不是在Employee.Id
上进行分组,因为StaffLink
是此处的主要表格而Employee
1}}仅用作此查询中的查找表。