我有一个表gainfinal,它由三列组成:countrycode、year和values。
我想计算所有行的z值。我像这样做了一个简单的查询。
SELECT (
`values` - STDDEV( `values` )
) / AVG( `values` ) AS zvalue
FROM `gainfinal`但是查询只返回一行。如何对所有行执行相同的操作?
发布于 2014-08-12 23:00:57
您需要一个子查询来获取聚合值:
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的查询中混合了聚合列和非聚合列。解决方案是执行计算的单独的子查询。
发布于 2014-08-13 02:11:53
这个怎么样?
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 gainfinalhttps://stackoverflow.com/questions/25267658
复制相似问题