2008-11-06 6 views
25

Как «Сгруппировать по» запрос с использованием псевдонима, например:группы по псевдониму (Oracle)

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

я получаю «alias_column»: INVALID_IDENTIFIER сообщение об ошибке. Зачем? Как сгруппировать этот запрос?

ответ

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 

Группировка обычно работает, если вы повторяете соответствующее выражение в предложении GROUP BY. Просто упоминание псевдонима невозможно, так как шаг SELECT является последним шагом к выполнению запроса, группировка происходит раньше, когда имена псевдонимов еще не определены.

К GROUP В результате подзапроса вам потребуется немного обход и использовать вложенный запрос, как указано выше.

7

Nest запрос с колонкой псевдоним:

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

В Oracle вы не можете использовать псевдоним в группе по п.

2

Чтобы использовать псевдоним в Oracle, вам необходимо убедиться, что псевдоним был определен вашим запросом в точке, в которой используется псевдоним.

Самый простой способ сделать это, чтобы просто рассматривать исходный запрос в качестве подзапроса - в этом случае,

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

становится

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

Я не могу говорить с исполнением последствия, но очень быстро писать, если вы пытаетесь повторно использовать псевдоним в своем запросе - бросьте все в круглые скобки и подпрыгните на уровень ...

Смежные вопросы