Группа по псевдониму (Oracle)
Как "группировать по" запрос с использованием псевдонима, например:
select count(*), (select * from....) as alias_column
from table
group by alias_column
Я получаю сообщение "alias_column": INVALID_IDENTIFIER. Зачем? Как сгруппировать этот запрос?
Ответы
Ответ 1
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 В результате подзапроса вам потребуется немного обход и использовать вложенный запрос, как указано выше.
Ответ 2
Вставьте запрос в столбец псевдонимов:
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;
Ответ 3
Чтобы использовать псевдоним в 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
Я не могу говорить о последствиях производительности, но очень быстро писать, если вы пытаетесь повторно использовать псевдоним в своем запросе - бросьте все в круглые скобки и подпрыгните на уровень...
Ответ 4
select count(*), (select * from....) as alias_column
from table
group by (select * from....)
В Oracle вы не можете использовать псевдоним в предложении group by.