提供雇用超过 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