我正在尝试在PgSQL中编写一个简单的选择查询但我一直收到错误。我不确定我错过了什么。任何帮助,将不胜感激。
select residuals, residuals/stddev_pop(residuals)
from mySchema.results;
这会产生错误
ERROR: column "results.residuals" must appear in the GROUP BY clause or be used in an aggregate function
残差是一个数值(连续变量)
我错过了什么?
答案 0 :(得分:1)
stddev_pop
是聚合函数。这意味着它需要一组行作为输入。您的查询在SELECT子句中提到了两个值:
residuals
,这是一行中的值。stddev_pop(residuals)
,这是一个聚合值,代表多行。你不是在告诉PostgreSQL它应该如何选择单一的residuals
值以符合总标准偏差,因此PostgreSQL说residuals
必须出现在GROUP BY子句中或用于聚合函数
我不确定你要完成什么,所以我无法告诉你如何修复你的查询。一个天真的建议是:
select residuals, residuals/stddev_pop(residuals)
from mySchema.results
group by residuals
但是这会让你计算相同值组的标准偏差,并且看起来效率不高(特别是当你要将标准偏差用作除数时)。
也许您需要重新审视您尝试计算的公式以及修复SQL。
如果你想分别计算标准偏差,然后将每个residuals
除以那么你需要这样的东西:
select residuals,
residuals/(select stddev_pop(residuals) from mySchema.results)
from mySchema.results