首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >列出所有员工及其在mysql中的主管人数

列出所有员工及其在mysql中的主管人数
EN

Stack Overflow用户
提问于 2017-02-02 05:32:06
回答 2查看 1.3K关注 0票数 0

我有一张员工的桌子。每个员工都有一个员工id。有些员工有一个主管字段,可以链接到另一个员工的id。有10名员工,其中两人是主管,每人管理4人。我想要一份所有员工的名单,以及他们管理的其他员工的人数。到目前为止,我似乎只能得到主管和他们的主管人数显示。这是我的问题:

代码语言:javascript
复制
SELECT s.employee_name, COUNT(*)
FROM employee e
     join employee s on e.supervisor_id= s.employee_id
group by s.
order by s.employee_name;

我尝试将JOIN更改为RIGHT JOIN,现在它将显示所有10名员工,其中两个主管显示为他们管理的4个人,但它显示所有其他没有人监督的人为1而不是0。我确信这是我遗漏的一些简单的东西。

示例数据:

代码语言:javascript
复制
employee_name, employee_name, supervisor_id,
'10111', 'Sydnee K. Stevens' NULL
'10870', 'Colton C. Rocha', '10111'
'11425', 'Astra V. Sharp','10111'
'12973', 'Melanie X. Rojas','10111'
'14451', 'Bethany Roman','10111'
'14597', 'Lydia Edwards', NULL
'16153', 'Selma Q. Conley', '14597'
'17730', 'Kristen B. Malone', '14597'
'17762', 'Barrett B. Bauer', '14597'
'18628', 'Shana Z. Flowers','14597'
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-02-02 06:02:52

使用LEFTRIGHT JOIN COUNT(*)将始终至少是1。如果使用LEFT JOIN (RIGHT JOIN令人困惑),您只需计算右侧表列中的值。COUNT(column)将忽略该列中所有带NULL的行。

代码语言:javascript
复制
SELECT s.*, COUNT(e.supervisor_id) as num_supervised
FROM employee s
LEFT JOIN employee e on e.supervisor_id = s.employee_id
group by s.employee_id
order by s.employee_name;
票数 0
EN

Stack Overflow用户

发布于 2017-02-02 05:50:23

我们使用select连接您的employee表,就像我们使用real表连接它一样。select将由所有supervisor_ids和supervisor_id字段中出现的次数组成( supervisor_id为null的记录将被忽略)。

代码语言:javascript
复制
SELECT e.employee_id, e.employee_name, s.supervising 
FROM employee e
LEFT JOIN (SELECT supervisor_id, count(*) as supervising 
           FROM employee
           WHERE supervisor_id is NOT NULL
           GROUP BY supervisor_id) AS s
ON(e.employee_id = s.supervisor_id)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41990154

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档