我正在使用SQL查詢來確定幾列的z-分數(x - μ/σ)。計算幾個列的各自z-分數
特別是,我有一個表如下所示:
my_table
id col_a col_b col_c
1 3 6 5
2 5 3 3
3 2 2 9
4 9 8 2
...我想選擇的每一行的每個數字的Z值,根據平均值和標準偏差的柱。
所以結果是這樣的:
id col_d col_e col_f
1 -0.4343 1.0203 ...
2 0.1434 -0.8729
3 -0.8234 -1.2323
4 1.889 1.5343
目前我的代碼計算得分兩列,看起來像這樣:
select id,
(my_table.col_a - avg(mya.col_a))/stddev(mya.col_a) as col_d,
(my_table.col_b - avg(myb.col_b))/stddev(myb.col_b) as col_e,
from my_table,
select col_a from my_table)mya,
select col_b from my_table)myb
group by id;
然而,這是極其緩慢。我一直在等待三分鐘查詢的分鐘數。
有沒有更好的方法來實現這個目標?我使用postgres,但任何通用語言都會幫助我。謝謝!
一些問題:1)你爲什麼要通過ID摸索?如果它是一個主鍵,那麼你將不會分組任何東西2)那裏有什麼'select col_a'在那裏做? 3)這實際上是一個評論。如果你沒有分組任何東西,那麼'avg(value)'將等於'value' –
1)我不需要按ID進行分組,但Postgres說「列'my_table.id'必須出現在GROUP BY子句中「,所以目前這樣做是爲了避免錯誤2)這些選擇不需要在查詢中,這是真的。 – dmc7z