如何查询拥有最多下属的经理的全部员工详情?
解决获取下属最多经理全量信息的问题
你之前的查询已经找到了下属最多的经理ID和对应的下属数,但要拿到这个经理的全部详情,关键是把统计结果和employee表做关联——毕竟manager字段存的是下属对应的经理的employeeid,我们要找的是employeeid等于这个经理ID的那条员工记录,而不是同一行里manager和employeeid相等的情况(这就是你之前没得到结果的原因)。
给你两种实用的优化方案:
方案1:子查询直接定位(适合大多数数据库)
这个方案先通过子查询找出下属最多的经理ID,再去原表查询该经理的所有信息:
SELECT e.* FROM employee e WHERE e.employeeid = ( -- 子查询:得到下属数最多的经理ID SELECT manager FROM employee GROUP BY manager ORDER BY COUNT(manager) DESC LIMIT 1 );
如果你的数据库支持LIMIT(比如MySQL、PostgreSQL),这个写法简单直接。
方案2:窗口函数处理并列情况(适合支持窗口函数的数据库,如MySQL 8+、SQL Server等)
如果存在多个经理下属数并列最多的情况,上面的方案只会返回一个,用窗口函数可以一次性返回所有并列第一的经理信息,还能带上他们的下属数量:
WITH manager_subcount AS ( SELECT manager, COUNT(manager) AS managercount, -- 按下属数降序排名,并列的会有相同名次 RANK() OVER(ORDER BY COUNT(manager) DESC) AS rnk FROM employee GROUP BY manager ) SELECT e.*, m.managercount FROM employee e JOIN manager_subcount m ON e.employeeid = m.manager WHERE m.rnk = 1;
这个写法更灵活,能覆盖更多场景。
内容的提问来源于stack exchange,提问作者SLHEFC1928
相关产品推荐
相关产品推荐

