我在这个问题上有点纠结,希望能得到一些帮助。我现在在这里。
我有一张名字的测试表。每个人都可以是招聘人员,也可以是员工。Recruited_by中的数字与person_id相关联。
Person_id Name Recruited_by
1 Jean Grayson 1
2 Paul Smith 7
3 John Do Null
4 Alex Lee 7
5 Lisa Kim 7
6 Bob Thompson 3
7 Mike Keen Null
8 Raymond Red 3
9 Alisson Jones 1
10 Kate James 3
以下是我到目前为止所遇到的查询,我正在尝试查找雇用超过3名员工的招聘人员的姓名(在本例中将不返回),以及没有被任何人招聘的员工人数(即空名)。
SELECT T.Name as Employees, COUNT(T1.Name) as Not_hired
FROM Test AS T
WHERE COUNT(T1.Name) IS NULL
LEFT OUTER JOIN Test AS T1
ON T.Recruited_by = T1.Person_id
GROUP BY T.Name
HAVING COUNT(T1.Name) > 3
但是,当我期望它返回没有被招聘人员雇用的员工数时,此查询将不返回任何内容!
发布于 2021-10-21 13:32:41
如果要在结果中只包含2列的1行,则可以对一个聚集的查询执行表的左联接,以获取雇用3人以上的人员的ids,并再次进行聚合,以获得没有被任何人招募的人数:
SELECT GROUP_CONCAT(CASE WHEN t2.Recruited_by IS NOT NULL THEN t1.Name END ORDER BY t1.Name) names,
SUM(t1.Recruited_by IS NULL) total_not_recruited
FROM Test t1
LEFT JOIN (
SELECT Recruited_by
FROM Test
GROUP BY Recruited_by
HAVING COUNT(*) > 3
) t2 ON t2.Recruited_by = t1.Person_id;
您将获得雇用超过3人的人的姓名(如果他们存在)作为逗号分隔列表。
见演示。
https://stackoverflow.com/questions/69661393
复制相似问题