2016-11-20 35 views
1

选择行我有查询,如下所示:的Oracle SQL - 水平最高的

SELECT CONNECT_BY_ROOT(name), LEVEL 
    FROM Workers 
    CONNECT BY PRIOR boss=nick 
    START WITH function IN ('programmer', 'designer'); 

我得到:

BELLA 1 
BELLA 2 
BELLA 3 
MICKEY 1 
MICKEY 2 
BOB  1 
BOB  2 
DUDE 1 
DUDE 2 
DUDE 3 
SONIA 1 
SONIA 2 
SONIA 3 
KATE 1 
KATE 2 
KATE 3 
LUKE 1 
LUKE 2 
LUKE 3 
LUKE 4 

我想是获得最高级别名称。 我的意思是:

BELLA 3 
MICKEY 2 
BOB  2 
DUDE 3 
SONIA 3 
KATE 3 
LUKE 4 

我试图做到这一点,如下所示:

SELECT CONNECT_BY_ROOT(name), MAX(LEVEL) 
    FROM Workers 
    CONNECT BY PRIOR boss=nick 
    START WITH function IN ('programmer', 'designer') 
    GROUP BY CONNECT_BY_ROOT(name); 

,但它不工作。我得到'00979。 00000 - 不是GROUP BY表达式的错误。为什么?我怎样才能使它工作?

回答

2

CONNECT_BY_ISLEAF

SELECT CONNECT_BY_ROOT(name), LEVEL 
FROM Workers 
WHERE connect_by_isleaf = 1 
CONNECT BY PRIOR boss=nick 
START WITH function IN ('programmer', 'designer'); 
+0

是的,这一切的一切,这是一点,谢谢:) – michalsol

2

一种方法是使用一个CTE:

with t(name, lev) as (
     SELECT CONNECT_BY_ROOT(name), LEVEL 
     FROM Workers 
     CONNECT BY PRIOR boss=nick 
     START WITH function IN ('programmer', 'designer') 
    ) 
select name, max(lev) 
from t 
group by name;