Группировка по псевдониму (Oracle) - PullRequest
29 голосов
/ 06 ноября 2008

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

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

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

Ответы [ 5 ]

59 голосов
/ 06 ноября 2008
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 является последним этапом выполнения запроса, группировка происходит раньше, когда псевдонимы еще не определены.

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

7 голосов
/ 06 ноября 2008

Вложить запрос в столбец псевдонимов:

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;
2 голосов
/ 19 апреля 2011

Чтобы использовать псевдоним в 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 

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

2 голосов
/ 06 ноября 2008
select count(*), (select * from....) as alias_column 
from table 
group by (select * from....)

В Oracle нельзя использовать псевдоним в предложении group by.

0 голосов
/ 09 мая 2018

Если вам не нужно использовать псевдоним, вы можете сделать это следующим образом:

select  
EXTRACT(year from CURRENT_DATE), count(*) from something
group by EXTRACT(year from CURRENT_DATE)
order by EXTRACT(year from CURRENT_DATE)

Вместо использования псевдонима и подзапроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...