我正在使用 SQL 查询来确定几列的 z 分数 (x - μ / σ)。
特别是,我有一个如下表:
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,但任何通用语言都会对我有所帮助。谢谢!