我想在外查詢中創建一個新變數,然后在子查詢中操作這個新變數。
但是,在子查詢中參考新列時,我收到一個錯誤 no such column exists
代碼:
dbGetQuery(db,
"SELECT id, var1/var2 AS new_var, (SELECT SUM(new_var) AS summed_var
FROM table
GROUP BY id)
FROM table")
在上面的代碼中,問題是new_var沒有傳遞給子查詢。如何將新定義的列傳遞給new_var子查詢?
編輯:切換內部查詢/外部查詢仍然不起作用:
dbGetQuery(db,
"SELECT SUM(new_var) AS summed_var (SELECT id, var1/var2 AS new_var
FROM table)
FROM table
GROUP BY id")
編輯 2:資料的結構如下。每一行是一個觀察id。我想new_var = var1/var2為每一行生成一個比率。然后,我想new_var對每個 id的比率求和。例如,在玩具資料中,Sally 的總比率將為3/4 7/8。
我的挑戰是GROUP BY與 SQL一起使用。我不確定在逐行GROUP BY id生成之后如何執行new_var。
id var1 var2 new_var
sally 3 4 3/4
susan 5 6 5/6
sally 7 8 7/8
tom 9 10 9/10
uj5u.com熱心網友回復:
假設您實際上想要顯示結果而不是“方程 3/4”,以下內容應該可以滿足您的需求:
select
id
, sum(var1/var2) as summed_var
from Tble
group by id
除了涉及聚合結果的所有運算式(即那些獨立的,或內部聚合函式如 SUM、COUNT 等)對每一行進行評估(這意味著對每一行計算 var1/var2),然后聚合 (SUM) 是為每個由 Id 組成的組執行(GROUP BY Id)
這就是你所尋求的嗎?
uj5u.com熱心網友回復:
使用SUM()視窗函式:
SELECT *,
ROUND(1.0 * var1 / var2, 2) new_var,
ROUND(SUM(1.0 * var1 / var2) OVER (PARTITION BY id), 2) summed
FROM tablename;
或者:
SELECT *,
ROUND(1.0 * var1 / var2, 2) new_var,
ROUND(1.0 * SUM(var1) OVER (PARTITION BY id) / SUM(var2) OVER (PARTITION BY id), 2) summed
FROM tablename;
或者如果您希望結果為文本:
SELECT *,
var1 || '/' || var2 new_var,
SUM(var1) OVER (PARTITION BY id) || '/' || SUM(var2) OVER (PARTITION BY id) summed
FROM tablename;
請參閱演示。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/395483.html
