首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL中计算每一行的Z分数?(简单)

问在MySQL中计算每一行的Z分数?(简单)
EN

Stack Overflow用户
提问于 2011-11-15 15:00:52
回答 3查看 3.2K关注 0票数 6

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

​

​

代码语言:javascript
复制
Z = Z-Score
X = Actual value
μ = Mean value
σ = Standard Deviation

我试过了:

代码语言:javascript
复制
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行。

当只需要计算一次子查询时,使用子查询似乎效率很低。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-11-15 15:20:01

代码语言:javascript
复制
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
票数 6
EN

Stack Overflow用户

发布于 2011-11-15 15:02:55

因为您正在使用聚合函数。

例如,如果使用Min或Max函数,则对于特定列,表中只能有一个最小值或最大值。AVG函数也是如此。

这就是聚合函数通常与Group By子句一起使用的原因。

票数 1
EN

Stack Overflow用户

发布于 2019-11-05 03:06:02

我也在试着这么做。我认为逻辑是操作查询结果所获得的每个值

代码语言:javascript
复制
select (value -
  (select avg(value) 
  from table
  group by grouper))/stddev(value)
from table;

我在考虑使用一些变量来存储标准差,或者从数据库中进行存储。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8132613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档