提供雇用超过 3 名员工的招聘人员姓名以及未被招聘人员雇用的员工人数的查询
Query that provides the names of the recruiters that hire more than 3 employees, and the number of employees that were not hired by a recruiter
我对这个问题有点困惑,希望得到一些帮助。这是我目前所在的位置。
我有这个名字测试 table。每个人都可以是招聘人员或雇员。 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 名员工的招聘人员的姓名(在这种情况下 return 什么都没有)以及招聘的员工人数没有被任何人招募(这将是 NULL 名称)。
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
然而,这个查询 return 在我期望它 return 未被招聘人员雇用的员工人数时什么也没有!
如果您只想在结果中包含 1 行 2 列,那么您可以将 table 左连接到一个查询,该查询聚合以获取雇用超过 3 人的人员的 ID,并且再次聚合得到未被任何人招募的人数:
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 人(如果存在)的人员姓名。
参见demo。
我对这个问题有点困惑,希望得到一些帮助。这是我目前所在的位置。
我有这个名字测试 table。每个人都可以是招聘人员或雇员。 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 名员工的招聘人员的姓名(在这种情况下 return 什么都没有)以及招聘的员工人数没有被任何人招募(这将是 NULL 名称)。
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
然而,这个查询 return 在我期望它 return 未被招聘人员雇用的员工人数时什么也没有!
如果您只想在结果中包含 1 行 2 列,那么您可以将 table 左连接到一个查询,该查询聚合以获取雇用超过 3 人的人员的 ID,并且再次聚合得到未被任何人招募的人数:
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 人(如果存在)的人员姓名。
参见demo。