如何编写MySQL查询语句筛选出指导人数超过2人的员工
筛选指导人数超过2人的员工查询语句
基础查询(仅获取导师SSN和指导人数)
如果只需要知道哪些导师(SSN)的指导人数超过2人,可以用这条语句:
SELECT mentored_by AS mentor_ssn, COUNT(*) AS mentee_count FROM employees -- 替换成你的实际表名 WHERE mentored_by IS NOT NULL GROUP BY mentored_by HAVING mentee_count > 2;
语句说明:
WHERE mentored_by IS NOT NULL:直接排除没有导师的员工记录,避免这些数据干扰统计结果。GROUP BY mentored_by:按导师的SSN分组,把所有属于同一个导师的员工归为一组。COUNT(*):统计每组内的员工数量,也就是该导师的指导人数。HAVING mentee_count > 2:筛选出指导人数超过2的分组,必须用HAVING而非WHERE——WHERE是分组前筛选行,HAVING是分组后筛选聚合结果。
进阶查询(获取导师完整信息)
如果需要展示导师的姓名、部门等其他信息,可以用自连接方式关联表本身:
SELECT e.SSN, e.employee_name, COUNT(m.mentored_by) AS mentee_count FROM employees e JOIN employees m ON e.SSN = m.mentored_by GROUP BY e.SSN, e.employee_name -- SELECT里的非聚合列都要放到GROUP BY中 HAVING mentee_count > 2;
语句说明:
- 把表分别命名为
e(代表导师)和m(代表被指导员工),通过e.SSN = m.mentored_by关联两者,找到每个导师对应的所有下属。 GROUP BY e.SSN, e.employee_name:按导师的唯一标识(SSN)和姓名分组,确保每个导师只显示一次。- 同样用
HAVING筛选出指导人数达标导师。
新手注意事项
- 替换语句中的
employees为你实际使用的表名。 - 如果员工姓名列不是
employee_name,换成你表中对应的列名即可。 - 可以按需添加更多导师字段到SELECT和GROUP BY中,比如部门、职位等。
内容的提问来源于stack exchange,提问作者yeah man12345
相关产品推荐
相关产品推荐

