2008-11-06 8 views
25

Wie 'Gruppe von' einer Abfrage eines Pseudonyms gestattet, zum Beispiel:Gruppe von Alias ​​(Oracle)

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

ich 'alias_column': INVALID_IDENTIFIER Fehlermeldung. Warum? Wie gruppiere ich diese Abfrage?

Antwort

54

Die Gruppierung funktioniert normalerweise, wenn Sie den entsprechenden Ausdruck in der GROUP BY-Klausel wiederholen. Es ist nicht möglich, einen Aliasnamen zu erwähnen, da der SELECT-Schritt der letzte Schritt ist, um eine Abfrage auszuführen, die Gruppierung früher erfolgt, wenn Alias-Namen noch nicht definiert sind.

Um GROUP BY das Ergebnis einer Unterabfrage, müssen Sie einen kleinen Umweg nehmen und eine geschachtelte Abfrage verwenden, wie oben angezeigt.

7

Nest der Abfrage mit der Alias-Spalte:

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....) 

In Oracle können Sie nicht ein Alias ​​in einer Gruppe von Klausel verwenden.

2

Um einen Alias ​​in Oracle zu verwenden, müssen Sie sicherstellen, dass der Alias ​​von Ihrer Abfrage an dem Punkt definiert wurde, an dem der Aliasname verwendet wird.

Der einfachste Weg, dies zu tun, ist die ursprüngliche Abfrage als Unterabfrage einfach zu behandeln - in diesem Fall

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

wird

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

ich auf die Leistung kann nicht sprechen Implikationen, aber es ist sehr schnell zu schreiben, wenn Sie versuchen, einen Alias ​​in Ihrer Abfrage wieder zu verwenden - werfen Sie alles in Klammern und springen Sie eine Ebene hoch ...

Verwandte Themen