原帖地址:
http://www.itpub.net/thread-1821229-1-1.html
题目要求:求出表scott.emp中手下有被管理员工的被管理员工数目.
看到关于connect_by_root的一个比较巧妙的用法
从结果来看,connect_by_root(ename)就是求出上级根节点的ename的值。
最终SQL:
SELECT MAX(connect_by_root(ename)), COUNT(*) - 1
FROM emp
CONNECT BY PRIOR empno = mgr
GROUP BY connect_by_root(ename)
HAVING COUNT(*) > 1
不过奇怪的是一定要增加一个MAX才能正常执行,应当是Oracle的一个bug。
另:
SELECT ename, manage_emp_cnt
FROM (SELECT ename,
(SELECT COUNT(b.empno) - 1
FROM scott.emp b
START WITH b.empno = a.empno
CONNECT BY PRIOR b.empno = b.mgr) manage_emp_cnt
FROM scott.emp a)
WHERE manage_emp_cnt > 0
QQ20131011104752.jpg
QQ20131011105624.jpg
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/8520577/viewspace-774133/
,如需转载,请注明出处,否则将追究法律责任。