我有一张员工表。每个员工都有一个员工ID。一些员工有一个主管领域,可以链接回另一个员工的身份。有10名员工,其中两名是主管,每人监督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'
答案 0 :(得分:0)
我们将您的员工表加入一个像我们将其加入真实表的选择。 select将包含所有supervisor_ids和supervisor_id字段中的出现次数(supervisor_id为null的记录将被忽略)。
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 :(得分:0)
使用LEFT
或RIGHT JOIN
COUNT(*)
始终至少为1
。如果使用LEFT JOIN
(RIGHT JOIN
令人困惑),您只需要计算右表列中的值。 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;