数学变量,同时在oracle中选择查询

时间:2017-06-19 10:23:30

标签: sql oracle variables

我有一些巨大的查询返回数据,有些列将由数学公式操纵,例如:

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。还有其他办法吗?

2 个答案:

答案 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”关键字只会为列标题添加别名

但是其他地方不能使用此列值。

如果要在其他地方使用该表达式值,则需要将其作为内部查询编写,然后在外部查询中使用它多少次。