簡體   English   中英

在“ where”子句中使用新列

[英]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

編輯:

  1. c的計算非常復雜,我不想where a + b > 0重復它
  2. 我需要一個可以在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

請參考以下操作順序進行邏輯查詢處理,以了解是否可以在另一個子句中使用派生列。

鍵入命令

  1. 選擇
  2. 哪里
  3. 通過...分組
  4. HAVING
  5. 訂購

邏輯查詢處理階段

  1. 哪里
  2. 通過...分組
  3. HAVING
  4. 選擇
  5. 訂購

你很親密,你可以這樣做

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM