Подтвердить что ты не робот

Группа по псевдониму (Oracle)

Как "группировать по" запрос с использованием псевдонима, например:

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

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

4b9b3361

Ответ 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.