[英]Using new columns in the “where” clause
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
工作的解決方案 如果要使用派生列,請使用公用表表達式。
with x as
(
select a, b, a+b as c
from t
)
select * from x where c >0
它必須看起來像這樣:
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
因為別名是在子查詢中分配的,所以此語法將起作用。
您可以像這樣或使用通用表表達式來運行此查詢
select a, b, a+b as c
from t
where a+b > 0
請參考以下操作順序進行邏輯查詢處理,以了解是否可以在另一個子句中使用派生列。
鍵入命令
邏輯查詢處理階段
你很親密,你可以這樣做
select a, b, a+b as c
from t
where a+b > 0
沒有
只是:
從t中選擇a,b,a + b作為c,其中a + b> 0
注意:至少對於mysql:排序依據和分組依據可以使用列(或表達式)位置
例如,按2分組,按1排序將使您在第2列(無論是字段名稱還是表達式)中排一行,並按第1列(字段或表達式)對其進行排序
也:某些RDBMS確實允許您在首次嘗試時引用列別名
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.