Sql 查找下属人数最多的经理姓名
我需要为Oracle编写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
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;