SQL查询问题:获取招聘超3人的招聘者姓名及未被招聘员工数
SQL查询问题排查与解决
原查询存在的问题
- 语法错误:WHERE子句中不能使用聚合函数
COUNT(T1.Name),WHERE的执行顺序早于GROUP BY分组聚合,此时聚合函数还未计算,会直接触发语法报错。 - 关联逻辑错误:统计招聘者的招聘人数时,应当以招聘者维度为左表,关联被招聘者的
Recruited_by字段,原SQL的关联条件和表选择逻辑相反,计数结果完全不符合预期。 - 需求合并错误:你提出的两个需求输出维度完全不同,前者输出符合条件的招聘者列表,后者输出单个统计数值,无法合并到同一个查询返回结果。
- 筛选逻辑不符合样本数据:你提供的示例数据中最高招聘人数为3人,
HAVING COUNT(T1.Name) > 3的条件本身就不会匹配到任何结果。
需求1:输出招聘员工数超过3人的招聘者姓名
正确查询语句如下:
SELECT t1.Name AS 招聘者姓名, COUNT(t2.Person_id) AS 招聘人数 FROM TEST t1 LEFT JOIN TEST t2 ON t1.Person_id = t2.Recruited_by GROUP BY t1.Person_id, t1.Name HAVING COUNT(t2.Person_id) > 3;
基于你提供的样本数据,该查询无符合条件的返回结果,和预期一致。
需求2:统计未被任何人招聘的员工数量
正确查询语句如下:
SELECT COUNT(*) AS 未被招聘员工数 FROM TEST WHERE Recruited_by IS NULL;
基于你提供的样本数据,该查询返回结果为2,对应人员为John Do、Mike Keen。
内容的提问来源于stack exchange,提问作者Jonezy Meszaros
相关产品推荐
相关产品推荐

