首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >查询,该查询提供雇用超过3名员工的招聘人员的姓名,以及招聘人员未雇用的员工人数。

查询,该查询提供雇用超过3名员工的招聘人员的姓名,以及招聘人员未雇用的员工人数。
EN

Stack Overflow用户
提问于 2021-10-21 11:43:57
回答 1查看 93关注 0票数 0

我在这个问题上有点纠结,希望能得到一些帮助。我现在在这里。

我有一张名字的测试表。每个人都可以是招聘人员,也可以是员工。Recruited_by中的数字与person_id相关联。

代码语言:javascript
运行
复制
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名员工的招聘人员的姓名(在本例中将不返回),以及没有被任何人招聘的员工人数(即空名)。

代码语言:javascript
运行
复制
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

但是,当我期望它返回没有被招聘人员雇用的员工数时,此查询将不返回任何内容!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-21 13:32:41

如果要在结果中只包含2列的1行,则可以对一个聚集的查询执行表的左联接,以获取雇用3人以上的人员的ids,并再次进行聚合,以获得没有被任何人招募的人数:

代码语言:javascript
运行
复制
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人的人的姓名(如果他们存在)作为逗号分隔列表。

演示

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69661393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档