如何重複使用我剛剛在同一個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
。
如何重複使用我剛剛在同一個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
。
一種可能的做法是這樣的:
create table t2
as
select foo, foo * log(foo) as ifoo
from (
select count(*) as foo, bar
from t1
) q
group by bar;
我不知道什麼是bar
這裏,但沒關係,你只需要確保它存在於子查詢。
您需要重複同樣的功能在第二列
create table t2 as
select count(*) as foo,
count(*) * log(count(*)) as ifoo
from t1
group by bar;
(注 - 也許你的意思是在這裏創建一個視圖,或者只是一個查詢,但這次不是創建一個有效的語法表,同樣的邏輯也適用 - 你不能在同一個語句中使用列的別名來引用它自己,邏輯必須重複)。
這會計算每個組中的元素3次,對嗎? – sds
@sds查詢優化器應確保count(*)僅爲返回的每一行計算一次。 –
這次掃描t1多少次? – sds
@sds,我相信這個答案只有一次;但你必須看看執行計劃。 –