Я отвечаю на вопрос: Как получить значение переменной, учитывая ее имя в строке? , которая закрыта как дубликат со ссылкой на этот вопрос.
Если рассматриваемые переменные являются частью объекта (например, части класса), то некоторые полезные функции для достижения именно этого: 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>
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, вам нужно будет немного обход и использовать вложенный запрос, как указано выше.
Чтобы использовать псевдоним в 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
Я не могу говорить о последствиях, но очень быстро писать если вы пытаетесь повторно использовать псевдоним в своем запросе - бросьте все в круглые скобки и подпрыгните на уровень ...
Если вам не нужно использовать псевдоним, вы можете сделать это следующим образом:
select
EXTRACT(year from CURRENT_DATE), count(*) from something
group by EXTRACT(year from CURRENT_DATE)
order by EXTRACT(year from CURRENT_DATE)
Вместо использования псевдонима и подзапроса.
select count(*), (select * from....) as alias_column
from table
group by (select * from....)
В Oracle вы не можете использовать псевдоним в предложении group by.
Задайте запрос с помощью столбца псевдонима:
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;