Sql 查询以查找每个经理下的员工数

Sql 查询以查找每个经理下的员工数,sql,self-join,Sql,Self Join,我有一个包含以下列的Employee表:Id、Name、Manager\u Name 我需要列出:每个经理手下的员工数量 如何形成一个简单的sql查询以获得结果 注意:可能有两名经理同名 表:- 创建表employee_test(Id int,Name VARCHAR(100),Manager_Name VARCHAR(100)) 输入: ID NAME MANAGER_NAME -- ------ ------------ 1 deep hari 2 mitra hari

我有一个包含以下列的Employee表:Id、Name、Manager\u Name

我需要列出:每个经理手下的员工数量

如何形成一个简单的sql查询以获得结果

注意:可能有两名经理同名

表:- 创建表employee_test(Id int,Name VARCHAR(100),Manager_Name VARCHAR(100))

输入:

 ID NAME   MANAGER_NAME
 -- ------ ------------
  1 deep   hari
  2 mitra  hari
  3 hari   kishan
  4 kirti  kishan
  5 kishan amit
  6 jumeet hari
  7 fareed deep
  8 stuti  kishore
我的尝试:-

选择m.Name作为ManagerName,计数(e.Name)作为EmployeeScont 来自雇员考试e 内部加入员工测试m在e.Manager上\u Name=m.Name 按m.名称分组

我的输出:-

 MANAGERNAME EMPLOYEESCOUNT
 ----------- --------------
 kishan                   2
 hari                     3
 deep                     1
但它不考虑其他经理的员工数量


更新:-这个问题对我来说也有点不清楚,因为正是面试官问的,要求结束这个问题。

我想你想要这个:

select Manager_Name, count(Name)
from Employee
group by Manager_Name

除了MJH的回复之外,如果可能有两名经理同名,那么需要有一种方法来区分他们

例如,假设您有以下内容(在SQL Server中):


在我看来,他说的是一张桌子,因为他说的是“自动加入”。但是,没有任何外键。“我不明白。”船长,你不需要fk的加入。(他们的主要目的是确保数据的一致性。)他将表与表本身连接起来。然后,这里有一个“未声明”的外键。为了使示例有意义,需要添加它。我不认为它是两个独立的表。@解释(查询或更新)数据库不需要使用MPALER约束。他们让DBMS拒绝知道无效状态/情况。我同意,有时SQL/English查询只有在某些约束条件下才有意义。然后,在其域之外调用部分函数(例如标量子查询)的查询将没有意义,但其他查询仍然有意义。但是这里并没有一个FK从MANAGER_的名字到另一个名字,因为amit&kishore不是表中给出的任何类型的名字。该问题不需要自联接!尽管如此,它的自连接还是有意义的。是的,这就是我所说的。缺少FK约束就有了一个不可能的例子。如果Deepak添加了约束条件,那么问题的表述方式会更好。您正在将表格与自身连接起来。还有一个外键。请将其添加到示例中。请将代码格式化为代码块,就像您在表格中所做的那样。总是检查你文章的格式化版本。如果ID识别人,为什么要用名字来识别经理?名字也能识别经理吗?了解您应该声明的PKs/Unique。还可以了解您应该声明的FK——列列表的值必须在其他位置显示为PK/UNIQUE时。请阅读并执行--如果您的输入表也没有格式化代码,请为它们提供代码。谷歌stackoverflow帮助。amit&kishore在结果中的位置?为什么您要求从经理姓名等于员工姓名的e行和m行生成行?你为什么不把经理的名字分组呢?您选择自加入的唯一原因是如果名称是标识符(无论如何都必须是标识符,因为这是您关联员工和经理的方式)&您希望获得经理ID。但是这个表并没有给出所有管理器名称的ID,所以您无法从这个表的自连接中获得它。无论如何,自联接不是您要分组的表。解释为什么要这样编写代码。如果“可能有两个同名的经理”,则无法使用此表获取“每个经理下的员工数”,因为它不提供员工的经理id。您只能获取每个经理姓名下的员工数。您可以删除您的帖子,请单击“删除”。“关闭”意味着在人们投票“重新打开”之前,答案不会被发布,尽管人们仍然可以投票和评论。您可以使用站点:stackexchange.com和站点:meta.stackoverflow.com搜索协议和帮助问题。您可以在这些网站上发布有关协议和帮助的问题。您可以将帖子标记为版主的消息。但是你能纠正/澄清你的问题吗?--经理的名字应该是经理的ID吗?每个经理的ID值都应该是ID值吗?管理者ID与ID之间是否应该有FK?MANAGER\u ID可以为NULL表示没有MANAGER吗?我会使用
count(*)
而不是
count(name)
,但我认为这是正确的。我倾向于同意“穿刺者”的说法,但如果有没有员工的经理呢?
create table Employee (Name VARCHAR(100), Manager_Id INT)
create table Managers (Id INT, Name VARCHAR(100))

SELECT d.Manager_Name, d.employeesCount 
FROM(
    SELECT m.Id, m.Name as Manager_Name, count(e.Name) as employeesCount
    FROM Employee e
    INNER JOIN Managers m ON e.Manager_Id = m.Id
    group by Id, m.Name 
) d