我正在寻找一种有效的方法来为MySQL表中的每一行分配Z分数(也称为标准分数)。

Z = Z-Score
X = Actual value
μ = Mean value
σ = Standard Deviation我试过了:
SELECT pTime,(M1-AVG(M1))/STD(M1),
(M2-AVG(M2))/STD(M2),
(M3-AVG(M3))/STD(M3),
(M4-AVG(M4))/STD(M4)
FROM mergebuys;但最终只有1行。
当只需要计算一次子查询时,使用子查询似乎效率很低。
发布于 2011-11-15 15:20:01
SELECT
mergebuys.pTime,
(mergebuys.M1 - aggregates.AVGM1) / aggregates.STDM1 AS z1,
(mergebuys.M2 - aggregates.AVGM2) / aggregates.STDM2 AS z2,
(mergebuys.M3 - aggregates.AVGM3) / aggregates.STDM3 AS z3,
(mergebuys.M4 - aggregates.AVGM4) / aggregates.STDM4 AS z4
FROM
mergebuys
CROSS JOIN (
SELECT
AVG(M1) AS AVGM1,
STD(M1) AS STDM1,
AVG(M2) AS AVGM2,
STD(M2) AS STDM2,
AVG(M3) AS AVGM3,
STD(M3) AS STDM3,
AVG(M4) AS AVGM4,
STD(M4) AS STDM4
FROM
mergebuys
) AS aggregates发布于 2011-11-15 15:02:55
因为您正在使用聚合函数。
例如,如果使用Min或Max函数,则对于特定列,表中只能有一个最小值或最大值。AVG函数也是如此。
这就是聚合函数通常与Group By子句一起使用的原因。
发布于 2019-11-05 03:06:02
我也在试着这么做。我认为逻辑是操作查询结果所获得的每个值
select (value -
(select avg(value)
from table
group by grouper))/stddev(value)
from table;我在考虑使用一些变量来存储标准差,或者从数据库中进行存储。
https://stackoverflow.com/questions/8132613
复制相似问题