Php 在MySQL中计算z值

Php 在MySQL中计算z值,php,mysql,sql,Php,Mysql,Sql,我有一个表,gainfinal,它由三列组成:countrycode、year和value 我想计算所有行的z值。 我做了这样一个简单的查询 SELECT ( `values` - STDDEV( `values` ) ) / AVG( `values` ) AS zvalue FROM `gainfinal` 但是查询只返回一行。如何对所有行执行相同的操作?您需要一个子查询来获取聚合值: SELECT (gf.`values` - stats.average) / stats.s A

我有一个表,
gainfinal
,它由三列组成:
countrycode
year
value

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

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

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

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

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;
在大多数数据库中,原始查询会生成错误,因为它在没有
分组依据的查询中混合了聚合列和非聚合列。解决方案是一个单独的子查询来进行计算。

这个怎么样

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

您试图计算Z值的目的是什么?唯一的国家代码、年份或其他什么?它适用于所有值。您的z分数公式不正确。减去平均值,再除以标准差。@Gordon Linoff。谢谢你的回答。但令人惊讶的是,它对我不起作用。上面写着:错误#1064@ShivaBhusal . . . 它应该会起作用,尤其是现在我为z-score.Yaa输入了正确的公式。我检查了公式并改正了它。但它仍然不起作用。这似乎很有趣,但也不起作用D