первый псевдоним работает второй, не вызывает недопустимый идентификатор [дубликат]

Я отвечаю на вопрос: Как получить значение переменной, учитывая ее имя в строке? , которая закрыта как дубликат со ссылкой на этот вопрос.

Если рассматриваемые переменные являются частью объекта (например, части класса), то некоторые полезные функции для достижения именно этого: hasattr, getattr и setattr.

Так, например, вы можете иметь:

class Variables(object):
    def __init__(self):
        self.foo = "initial_variable"
    def create_new_var(self,name,value):
        setattr(self,name,value)
    def get_var(self,name):
        if hasattr(self,name):
            return getattr(self,name)
        else:
            raise("Class does not have a variable named: "+name)

Тогда вы можете сделать:

v = Variables()
v.get_var("foo")

"initial_variable"

v.create_new_var(v.foo,"is actually not initial")
v.initial_variable

"на самом деле не является начальным"

blockquote>

26
задан Ivan Bosnic 6 November 2008 в 13:04
поделиться

5 ответов

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 BY результат sub-query, вам нужно будет немного обход и использовать вложенный запрос, как указано выше.

55
ответ дан Tomalak 22 August 2018 в 10:39
поделиться

Чтобы использовать псевдоним в 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
ответ дан Andrew 22 August 2018 в 10:39
поделиться

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

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

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

0
ответ дан augre 22 August 2018 в 10:39
поделиться
select count(*), (select * from....) as alias_column 
from table 
group by (select * from....)

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

2
ответ дан ian_scho 22 August 2018 в 10:39
поделиться

Задайте запрос с помощью столбца псевдонима:

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;
7
ответ дан Tony Andrews 22 August 2018 в 10:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: