我有一张员工的桌子。每个员工都有一个员工id。有些员工有一个主管字段,可以链接到另一个员工的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'发布于 2017-02-02 06:02:52
使用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;发布于 2017-02-02 05:50:23
我们使用select连接您的employee表,就像我们使用real表连接它一样。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)https://stackoverflow.com/questions/41990154
复制相似问题