我正在使用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
Run Code Online (Sandbox Code Playgroud)
...并且我想根据其列的平均值和标准偏差选择每行中每个数字的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
Run Code Online (Sandbox Code Playgroud)
目前我的代码计算两列的分数,如下所示:
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;
Run Code Online (Sandbox Code Playgroud)
但是,这非常慢.我一直在等待分钟进行三列查询.
有没有更好的方法来实现这一目标?我正在使用postgres,但任何一般语言都会对我有帮助.谢谢!
Perldocs只表示foreach循环"迭代正常列表值" https://perldoc.perl.org/perlsyn.html#Foreach-Loops,但我有时会看到它们带有字符串参数,例如以下示例:
foreach (`curl example.com 2>/dev/null`) {
# iterates 50 times
}
foreach ("foo\nbar\nbaz") {
# iterates just 1 time. Why?
}
Run Code Online (Sandbox Code Playgroud)
传递像这样定义的字符串的行为是什么?另外,为什么不同的结果是传递由反引号命令和文字字符串返回的字符串,如示例中所示?