我有一些巨大的查询返回数据,有些列将由数学公式操纵,例如:
select
num1,
num2,
num2 + num1 as num3,
num1 * num3 as num4
from my Tables...
当我尝试在num3
的计算中重复使用计算的num4
时,会出现问题。难道我不能使用这样的语法,应该这样使用:
select
num1,
num2,
num2 + num1 as num3,
num1 * (num2 + num1) as num4
from my Tables...
它似乎不是一个很好的方式imo。还有其他办法吗?
答案 0 :(得分:3)
您必须按照当前的步骤重复计算,或使用为列表达式指定别名的子查询,然后您可以在外部查询中引用:
select
num1,
num2,
num3,
num1 * num3 as num4
from (
select
num1,
num2,
num2 + num1 as num3
from my Tables
)
除了order-by子句之外,您不能在同一级别的查询中引用列别名。 From the documentation:
<强> c_alias 强>
为列表达式指定别名。 Oracle数据库将在结果集的列标题中使用此别名。AS
关键字是可选的。别名在查询期间有效地重命名选择列表项。别名可以在 order_by_clause 中使用,但不能在查询中的其他子句中使用。
最后一句是重要的一点。使用子查询是可以的,因为这是一个不同的级别。
答案 1 :(得分:1)
因为主查询中的(num2 + num1 as num3)等计算不能在任何地方,因为
“as”关键字只会为列标题添加别名
但是其他地方不能使用此列值。
如果要在其他地方使用该表达式值,则需要将其作为内部查询编写,然后在外部查询中使用它多少次。