PgSQL - 执行select时出错

时间:2014-02-24 04:11:37

标签: postgresql select

我正在尝试在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

残差是一个数值(连续变量)

我错过了什么?

1 个答案:

答案 0 :(得分:1)

stddev_pop聚合函数。这意味着它需要一组行作为输入。您的查询在SELECT子句中提到了两个值:

  1. residuals,这是一行中的值。
  2. stddev_pop(residuals),这是一个聚合值,代表多行。
  3. 你不是在告诉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