我想要做这样的事情:如果我在SELECT子句中使用别名,我该如何引用该别名?
SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, Foo - col_c as Bar
FROM my_table
WHERE...;
不过,我得到一个错误说Foo
是未知的。由于Foo是从其他一些列上的一些计算中推导出来的,所以我不想再次重复公式Bar
。任何解决方法?
我想要做这样的事情:如果我在SELECT子句中使用别名,我该如何引用该别名?
SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, Foo - col_c as Bar
FROM my_table
WHERE...;
不过,我得到一个错误说Foo
是未知的。由于Foo是从其他一些列上的一些计算中推导出来的,所以我不想再次重复公式Bar
。任何解决方法?
SELECT Foo, Foo - col_c as Bar
from (
SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, col_c
FROM my_table
WHERE...
) t;
+1:和Hallainzil的回答一样,但没有错误:) – MatBailie
我通常会用一个子查询处理这个问题:
SELECT Foo, Foo - col_c as Bar
FROM (
SELECT round(100*(col_a - col_b)/col_a, 1) as Foo, col_c
FROM my_table
WHERE ...
)
WHERE ...
如果你有SQL Server中,CTE达到同样的事情。
子查询出现同样的问题。你可能的意思是将“Foo - col_c as Bar”移动到外部查询中。不过,我不确定在这种情况下子查询是否是最优的。 –
正确。 @codie:看到这个类似的问题的解释:http://stackoverflow.com/questions/6545664/using-case-expression-column-in-where-clause/6545685#6545685 –
@codie:你要么使用子查询解决方案或者在'WHERE'子句中重复代码。 –
你用什么db? – beny23
我正在使用Vertica,但我也遇到了与MySQL相同的错误。 –