hive
拒绝此代码:
select a, b, a+b as c
from t
where c > 0
说Invalid table alias or column reference 'c'
。
我真的需要写一些像
这样的东西select * from
(select a, b, a+b as c
from t)
where c > 0
编辑:
c
的计算很复杂,我不想在where a + b > 0
中重复它hive
答案 0 :(得分:2)
如果要使用派生列,请使用公用表表达式。
with x as
(
select a, b, a+b as c
from t
)
select * from x where c >0
答案 1 :(得分:1)
它必须如下所示:
select a, b, a+b as c
from t
where a+b > 0
解释/记住这一点的简单方法是:SQL不能引用在其自己的实例中分配的别名。但是,如果你这样做,它会起作用:
SELECT a,b,c
FROM(
select a, b, a+b as c
from t) as [calc]
WHERE c > 0
此语法可行,因为别名是在子查询中分配的。
答案 2 :(得分:1)
您可以像这样或使用公用表表达式
运行此查询select a, b, a+b as c
from t
where a+b > 0
引用逻辑查询处理的以下操作顺序,以了解是否可以在另一个子句中使用派生列。
键入命令
逻辑查询处理阶段
答案 3 :(得分:0)
你很近,你可以这样做
select a, b, a+b as c
from t
where a+b > 0
答案 4 :(得分:0)
没有
只是:
选择a,b,a + b作为c 从T 其中a + b> 0
注意:至少对于mysql:order by和group by你可以使用列(或表达式)位置
e.g。 group by 2,order by 1将为每列2(无论是字段名称还是表达式)获取一行,并按列1(字段或表达式)对其进行排序
另外:某些RDBMS确实允许您在第一次尝试时引用列别名