【发布时间】:2018-09-23 16:58:38
【问题描述】:
我有一个包含以下列的 Employee 表:Id、Name、Manager_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,count(e.Name) 作为 employeesCount FROM employee_test e INNER JOIN employee_test m ON e.Manager_Name = m.Name 按 m.Name 分组
我的输出:-
MANAGERNAME EMPLOYEESCOUNT
----------- --------------
kishan 2
hari 3
deep 1
但它不考虑其他经理的员工人数?
更新:- 我也不太清楚,因为面试官确切地问了这个问题,请求结束这个问题。
【问题讨论】:
-
您正在加入该表。然后有一个外键。请将其添加到示例中。
-
请在代码块中格式化代码,就像你做表格一样。始终检查帖子的格式化版本。如果 ids 识别人,你为什么用名字来识别经理?名字也能识别经理吗?了解您应该声明哪些 PK/UNIQUE。还要了解您应该声明的 FK——当列列表的值必须在其他地方显示为 PK/UNIQUE 时。还请阅读minimal reproducible example 并采取行动--如果您的输入表也不是格式化代码,请为它们提供代码。 Google stackoverflow 帮助回复sqlfiddle.com.
-
结果中的 amit 和 kishore 在哪里? minimal reproducible example 你为什么要求可以由 e 行和 m 组成的行,其中经理姓名等于员工姓名?为什么不只是对经理姓名进行分组?您自行加入的唯一原因是名称是标识符(无论如何都必须如此,因为这就是您关联员工和经理的方式)并且您想获取经理 ID。但是这个表没有给出所有经理名字的 id,所以你不能从这个表的自联接中得到它。无论如何,自联接不是您要分组的表。解释为什么要像以前那样编写代码。
-
如果“可能有两个同名经理”,则无法使用此表获取“每个经理下的员工数量”,因为它没有提供员工的经理 ID。您只能获取每个经理姓名下的员工数量。
-
您可以删除您的帖子,点击“删除”。 “关闭”意味着在人们投票“重新打开”之前阻止发布答案,尽管人们仍然可以投票和评论。您可以使用 site:stackexchange.com 和 site:meta.stackoverflow.com 搜索协议和帮助问题。您可以在这些站点上发布有关协议和帮助的问题。您可以标记帖子以向版主发送消息。但是你能纠正/澄清你的问题吗?--MANAGER_NAME 应该是 MANAGER_ID 吗?每个 MANAGER_ID 值都应该是一个 ID 值吗?是否应该有从 MANAGER_ID 到 ID 的 FK? MANAGER_ID 可以为 NULL 表示没有经理吗?