查看king下每一代的个数及平均sal
SQL> select level,count(*),trunc(avg(sal)) from emp start with mgr is null connect by prior empno=mgr group by level;
LEVEL COUNT(*) TRUNC(AVG(SAL))
---------- ---------- ---------------
1 1 5000
2 3 2758
4 2 950
3 8 1731
确认节点之间是否存在层级关系,如存在,列出层级关系
这可应用在产品的组装关系,员工的上下级领导关系的判断,如下面语句判断7839和7788是否有层级关系,如果返回结果,则表示存在层级关系
SQL> select empno,ename,level,sys_connect_by_path(empno,'/') from emp where empno=7788 start with empno=7839 connect by mgr=prior empno;
EMPNO ENAME LEVEL SYS_CONNECT_BY_PATH(EMPNO,'/')
----- ---------- ---------- --------------------------------------------------------------------------------
7788 SCOTT 3 /7839/7566/7788
查找每个部分的老大,增加了限制条件prior deptno<> deptno
SQL> select deptno,empno,ename,level from emp start with empno=7839 connect by mgr=prior empno and prior deptno<> deptno;
DEPTNO EMPNO ENAME LEVEL
------ ----- ---------- ----------
10 7839 KING 1
20 7566 JONES 2
30 7698 BLAKE 2
树形遍历排序order siblings by
先看一下用普通order取排序的情况
SQL> select deptno,empno,ename,lpad(empno,length(empno)+(level-1)*4,'-') from emp start with mgr is null connect by prior empno=mgr order by ename;
DEPTNO EMPNO ENAME LPAD(EMPNO,LENGTH(EMPNO)+(LEVE
------ ----- ---------- --------------------------------------------------------------------------------
20 7876 ADAMS ------------7876
30 7499 ALLEN --------7499
30 7698 BLAKE ----7698
10 7782 CLARK ----7782
20 7902 FORD --------7902
30 7900 JAMES --------7900
20 7566 JONES ----7566
10 7839 KING 7839
30 7654 MARTIN --------7654
10 7934 MILLER --------7934
20 7788 SCOTT --------7788
20 7369 SMITH ------------7369
30 7844 TURNER --------7844
30 7521 WARD --------7521
原先层次关系已经被打乱了,order关键词后面加上silbings
SQL> select deptno,empno,ename,lpad(empno,length(empno)+(level-1)*4,'-') from emp start with mgr is null connect by prior empno=mgr order siblings by ename;
DEPTNO EMPNO ENAME LPAD(EMPNO,LENGTH(EMPNO)+(LEVE
------ ----- ---------- --------------------------------------------------------------------------------
10 7839 KING 7839
30 7698 BLAKE ----7698
30 7499 ALLEN --------7499
30 7900 JAMES --------7900
30 7654 MARTIN --------7654
30 7844 TURNER --------7844
30 7521 WARD --------7521
10 7782 CLARK ----7782
10 7934 MILLER --------7934
20 7566 JONES ----7566
20 7902 FORD --------7902
20 7369 SMITH ------------7369
20 7788 SCOTT --------7788
20 7876 ADAMS ------------7876
层次关系没有变,每一层(level)内按ename排号序了
| 广告合作:400-664-0084 全国热线:400-664-0084 Copyright 2010 - 2017 www.my8848.com 珠峰网 粤ICP备15066211号 珠峰网 版权所有 All Rights Reserved
|