在MySQL中计算z值

时间:2014-08-12 14:58:49

标签: php mysql sql

我有一个表格gainfinal,其中包含三列:countrycodeyearvalues

我想计算所有行的z值。 我做了这样一个简单的查询。

SELECT (
 `values` - STDDEV(  `values` )
) / AVG(  `values` ) AS zvalue
FROM  `gainfinal`

但查询只返回一行。如何为所有行执行相同的操作?

2 个答案:

答案 0 :(得分:0)

您需要子查询来获取聚合值:

SELECT (gf.`values` - stats.average) / stats.s AS zvalue
FROM  `gainfinal` gf cross join
      (select sttdev(values) as s, avg(values) as average from gainfinal) stats;

在大多数数据库中,原始查询会生成错误,因为它在查询中混合聚合列和非聚合列而没有group by。解决方案是一个单独的子查询,用于计算。

答案 1 :(得分:0)

这个怎么样?

DECLARE @stdev AS FLOAT, @avg AS FLOAT

SELECT @stdev = STDEV([values]), @avg = AVG([values])
FROM gainfinal

SELECT 
    countrycode
    , year
    , [values]
    , ([values] - @stdev) / @avg AS zvalue
FROM gainfinal