提供雇用超过 3 名员工的招聘人员的姓名以及未被招聘人员雇用的员工数量的查询
Posted
技术标签:
【中文标题】提供雇用超过 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 【发布时间】:2021-12-08 04:25:12 【问题描述】:我有点卡在这个问题上,希望能得到一些帮助。这是我目前所在的位置。
我有这张 TEST 名称表。每个人都可以是招聘人员或员工。 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 名员工的招聘人员的姓名(在这种情况下不会返回任何内容)以及未被任何人招聘的员工人数(其中将是 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
但是,当我期望它返回未被招聘人员雇用的员工数量时,此查询没有返回任何内容!
【问题讨论】:
WHERE 子句中没有使用聚合函数。请将 WHERE 子句放在 ON 子句之后且不要聚合。请提供预期的输出。 您要求的 2 个不同的结果无法合并。您的预期结果是什么? @RahulBiswas 我希望看到一列会显示 Name 的东西,这将是 Null,另一列会显示 Not_hired,它会显示数值 2。 如果有 5 个招聘人员雇佣了 3 个以上的人,那么结果会出现 5 行,其中 1 列 5 个名字,另一列 2 个数字 5 次? 【参考方案1】:如果您希望结果中只有 1 行和 2 列,那么您可以对表执行左连接查询,该查询聚合以获取雇用超过 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。
【讨论】:
以上是关于提供雇用超过 3 名员工的招聘人员的姓名以及未被招聘人员雇用的员工数量的查询的主要内容,如果未能解决你的问题,请参考以下文章