2016-11-20 2 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;