我试图从包含收入值的表中获得标准差,使用postgresql中的基本数学函数。
这就是我的尝试:
SELECT sqrt(sum(power(income - (sum(income) / count(income)), 2)) / (count(*) - 1)) FROM income_data
然而,我一直收到以下错误:
ERROR: aggregate function calls cannot be nested
有没有人遇到过这个问题?我觉得获得标准偏差的逻辑应该有效,虽然到目前为止还没有运气,但我很欣赏任何有关如何解决的建议。
答案 0 :(得分:5)
您应该在单独的查询中计算平均值,例如在with声明中:
with mean as (
select sum(income) / count(income) as mean
from income_data
)
select sqrt(sum(power(income - mean, 2)) / (count(*) - 1))
from income_data
cross join mean;
或在派生表中:
select sqrt(sum(power(income - mean, 2)) / (count(*) - 1))
from income_data
cross join (
select sum(income) / count(income) as mean
from income_data
) s;