2008-11-06 19 views
25

Jak 'grupa przez' kwerendy przy użyciu aliasu, na przykład:Grupa przez alias (Oracle)

select count(*), (select * from....) as alias_column 
from table 
group by alias_column 

otrzymuję 'alias_column': Komunikat o błędzie INVALID_IDENTIFIER. Czemu? Jak pogrupować to zapytanie?

Odpowiedz

54
select 
    count(count_col), 
    alias_column 
from 
    (
    select 
    count_col, 
    (select value from....) as alias_column 
    from 
    table 
) as inline 
group by 
    alias_column 

Grupowanie zwykle działa, jeśli powtórzy się odpowiednie wyrażenie w klauzuli GROUP BY. Wystarczy wspomnieć o aliasie nie jest możliwe, ponieważ krok SELECT jest ostatnim krokiem do wykonania kwerendy, grupowanie dzieje się wcześniej, gdy nazwy aliasów nie są jeszcze zdefiniowane.

Do GRUPY W wyniku zapytania podrzędnego trzeba będzie trochę objechać i użyć zagnieżdżonego zapytania, jak wskazano powyżej.

7

Nest zapytanie z kolumny alias:

select count(*), alias_column 
from 
(select empno, (select deptno from emp where emp.empno = e.empno) as alias_column 
    from emp e 
) 
group by alias_column; 
1
select count(*), (select * from....) as alias_column 
from table 
group by (select * from....) 

W Oracle nie można użyć aliasu w grupie przez klauzuli.

2

Aby użyć aliasu w Oracle, należy upewnić się, że alias został zdefiniowany w zapytaniu w miejscu, w którym używany jest alias.

Najprostszym sposobem na to jest po prostu traktować jako oryginalne zapytanie podzapytania - w tym przypadku

select count(*), (select * from....) as alias_column 
from table 
group by (select * from....) 

staje

select count, alias_column 
from 
    (select count(*) as count, (select * from....) as alias_column 
    from table) 
group by alias_column 

nie mogę mówić do wykonywania implikacje, ale bardzo szybko jest pisać, jeśli próbujesz ponownie użyć aliasu w zapytaniu - wyrzuć wszystko w nawiasach i podnieś poziom ...