2013-12-19 84 views
2

如何重複使用我剛剛在同一個select中創建的變量(列)?如何在同一個select語句中使用新創建的變量?

create table t2 
as select count(bar) as foo, foo * log(foo) as ifoo 
from t1 
group by bar; 

,你可以看到,我創造t2.foo(的次數bar每個值出現在t1),我想使用該值來計算t2.ifoo

回答

1

一種可能的做法是這樣的:

create table t2 
as 
    select foo, foo * log(foo) as ifoo 
    from (
     select count(*) as foo, bar 
     from t1 
    ) q 
    group by bar; 

我不知道什麼是bar這裏,但沒關係,你只需要確保它存在於子查詢。

+0

這次掃描t1多少次? – sds

+0

@sds,我相信這個答案只有一次;但你必須看看執行計劃。 –

1

您需要重複同樣的功能在第二列

create table t2 as 
    select count(*) as foo, 
     count(*) * log(count(*)) as ifoo 
    from t1 
    group by bar; 

(注 - 也許你的意思是在這裏創建一個視圖,或者只是一個查詢,但這次不是創建一個有效的語法表,同樣的邏輯也適用 - 你不能在同一個語句中使用列的別名來引用它自己,邏輯必須重複)。

+0

這會計算每個組中的元素3次,對嗎? – sds

+0

@sds查詢優化器應確保count(*)僅爲返回的每一行計算一次。 –

相關問題