列出 mysql 中的所有员工及其监督的人数
List all employees and the number of people they supervise in mysql
我有 table 名员工。每个员工都有一个员工 ID。一些员工有一个主管字段,该字段链接回另一个员工的 ID。现有员工10人,其中主管2人,每人主管4人。我正在尝试获取所有员工的列表以及他们监督的其他员工的数量。到目前为止,我似乎只能让主管和他们监督的人数显示出来。这是我的查询:
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。我确定我缺少的是简单的东西。
示例数据:
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'
我们加入您的员工 table 与 select 就像我们加入真正的 table 一样。 select 将包含所有 supervisor_ids 和 supervisor_id 字段中的出现次数(supervisor_id 为空的记录将被忽略)。
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)
使用 LEFT
或 RIGHT JOIN
COUNT(*)
将始终至少 1
。如果使用 LEFT JOIN
(RIGHT JOIN
令人困惑),您只需要计算右侧 table 列中的值。 COUNT(column)
将忽略该列中包含 NULL 的所有行。
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;
我有 table 名员工。每个员工都有一个员工 ID。一些员工有一个主管字段,该字段链接回另一个员工的 ID。现有员工10人,其中主管2人,每人主管4人。我正在尝试获取所有员工的列表以及他们监督的其他员工的数量。到目前为止,我似乎只能让主管和他们监督的人数显示出来。这是我的查询:
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。我确定我缺少的是简单的东西。
示例数据:
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'
我们加入您的员工 table 与 select 就像我们加入真正的 table 一样。 select 将包含所有 supervisor_ids 和 supervisor_id 字段中的出现次数(supervisor_id 为空的记录将被忽略)。
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)
使用 LEFT
或 RIGHT JOIN
COUNT(*)
将始终至少 1
。如果使用 LEFT JOIN
(RIGHT JOIN
令人困惑),您只需要计算右侧 table 列中的值。 COUNT(column)
将忽略该列中包含 NULL 的所有行。
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;