Sql 查找下属人数最多的经理姓名

Sql 查找下属人数最多的经理姓名,sql,oracle,Sql,Oracle,我需要为Oracle编写SQL查询,该查询显示具有最大下属数的经理姓名 表的结构: EMPNO INT PRIMARY KEY ENAME VARCHAR NOT NULL MGR_ID INT 经理ID员工属性是经理的临时主密钥 到目前为止,我所尝试的: SELECT ENAME FROM EMP WHERE (SELECT COUNT(MGR_ID) FROM EMP GROUP BY MGR_ID)= (SELECT MAX(SELECT COUNT(MGR_ID) FROM EMP

我需要为Oracle编写SQL查询,该查询显示具有最大下属数的经理姓名

表的结构:

EMPNO INT PRIMARY KEY
ENAME VARCHAR NOT NULL
MGR_ID INT
经理ID员工属性是经理的临时主密钥

到目前为止,我所尝试的:

SELECT ENAME FROM EMP WHERE 
(SELECT COUNT(MGR_ID) FROM EMP GROUP BY MGR_ID)=
(SELECT MAX(SELECT COUNT(MGR_ID) FROM EMP GROUP BY MGR_ID) FROM EMP);
另一个版本由一匹没有名字的马建议

SELECT e.ename FROM
   emp e
   INNER JOIN 
     ( 
      SELECT mgr_id, DENSE_RANK () OVER (ORDER BY COUNT (*) DESC) rnk
        FROM emp
    GROUP BY mgr_id
    )list
   ON ( list.mgr_id=e.empno)
  WHERE  list.rnk=1
PS:查询未测试

解决方案为

with temp_tab as
(
select mgr_id, count(*) num_emp from emp group by mgr_id order by 2 desc
)
select * from temp_tab where rownum<=1;

您可以通过组合窗口函数和聚合来简化这一过程:选择mgr_id,densite_rank over order by count*desc from emp group by mgr_id-请开始使用显式连接,而不是where中旧的、过时的隐式连接clause@a_horse_with_no_name谢谢你,先生,我以后会处理的。
with temp_tab as
(
select mgr_id, count(*) num_emp from emp group by mgr_id order by 2 desc
)
select * from temp_tab where rownum<=1;