gpt4 book ai didi

mysql - 如何根据 emp 表中的员工层次结构给出 RANK

转载 作者:行者123 更新时间:2023-11-29 22:27:06 26 4
gpt4 key购买 nike

我有 emp 表,KING 是公司的首席执行官,他没有经理。KING 应该获得排名“1”。KING 是 JONES、CLARK、BLAKE 的经理。所以这些将获得 RANK '2'......等等。

员工和经理关系的中间表:

empno   ename   mgr
7566 JONES KING
7782 CLARK KING
7698 BLAKE KING
7900 JAMES BLAKE
7844 TURNER BLAKE
7654 MARTIN BLAKE
7521 WARD BLAKE
7499 ALLEN BLAKE
7934 MILLER CLARK
7902 FORD JONES
7788 SCOTT JONES
7876 ADAMS SCOTT
7369 SMITH FORD
7839 KING NULL

最终输出应该是这样的:

mgr   rank    
KING 1
JONES 2
CLARK 2
BLAKE 2
JAMES 3
TURNER 3
MARTIN 3
WARD 3
ALLEN 3
MILLER 3
SCOTT 3
FORD 3
ADAMS 4
SMITH 4

提前致谢。我希望这在 Oracle 中完成。

最佳答案

过去我花了一段时间才理解了层次结构查询......但是,一旦你花时间摆弄它们,它们通常并不那么难。

  SQL> with w_data as (
2 select 7566 empno, rtrim('JONES ') ename, rtrim('KING ') mgr from dual union all
3 select 7782 empno, rtrim('CLARK ') ename, rtrim('KING ') mgr from dual union all
4 select 7698 empno, rtrim('BLAKE ') ename, rtrim('KING ') mgr from dual union all
5 select 7900 empno, rtrim('JAMES ') ename, rtrim('BLAKE') mgr from dual union all
6 select 7844 empno, rtrim('TURNER') ename, rtrim('BLAKE') mgr from dual union all
7 select 7654 empno, rtrim('MARTIN') ename, rtrim('BLAKE') mgr from dual union all
8 select 7521 empno, rtrim('WARD ') ename, rtrim('BLAKE') mgr from dual union all
9 select 7499 empno, rtrim('ALLEN ') ename, rtrim('BLAKE') mgr from dual union all
10 select 7934 empno, rtrim('MILLER') ename, rtrim('CLARK') mgr from dual union all
11 select 7902 empno, rtrim('FORD ') ename, rtrim('JONES') mgr from dual union all
12 select 7788 empno, rtrim('SCOTT ') ename, rtrim('JONES') mgr from dual union all
13 select 7876 empno, rtrim('ADAMS ') ename, rtrim('SCOTT') mgr from dual union all
14 select 7369 empno, rtrim('SMITH ') ename, rtrim('FORD ') mgr from dual union all
15 select 7839 empno, rtrim('KING ') ename, NULL mgr from dual
16 )
17 select empno, ename, mgr, level
18 from w_data
19 connect by mgr = PRIOR ename
20 start with mgr IS NULL
/
21
EMPNO ENAME MGR LEVEL
---------- ------ ----- ----------
7839 KING 1
7698 BLAKE KING 2
7499 ALLEN BLAKE 3
7900 JAMES BLAKE 3
7654 MARTIN BLAKE 3
7844 TURNER BLAKE 3
7521 WARD BLAKE 3
7782 CLARK KING 2
7934 MILLER CLARK 3
7566 JONES KING 2
7902 FORD JONES 3

EMPNO ENAME MGR LEVEL
---------- ------ ----- ----------
7369 SMITH FORD 4
7788 SCOTT JONES 3
7876 ADAMS SCOTT 4

14 rows selected.

SQL>
  • w_data 只是为了伪造你的测试数据..
  • 通过 mgr 连接 = 先前的名称这会获取每条记录,并将经理与上一级别的员工进行比较。
  • 以mgr开头的为空这告诉 Oracle 从哪里开始...
  • 级别是等级制度的深度。

关于mysql - 如何根据 emp 表中的员工层次结构给出 RANK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30176803/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com