选择多个没有聚合表达式的字段时,Oracle SQL会返回错误

时间:2016-02-21 20:57:38

标签: sql oracle group-by

我正在使用SQL查询,我有一个包含月份和价格的表格,我正在执行移动平均线。我的代码如下:

 SELECT month, prices,
 round(AVG(SUM(prices)) OVER
   (ORDER BY month ROWS BETWEEN 1 PRECEDING AND CURRENT ROW),2)
    AS MA
    FROM tblma
    GROUP BY month
    ORDER BY month;

虽然对我而言似乎显然我犯了一个我没看到的错误。 我的重新调整错误是:00979。00000 - “不是GROUP BY表达式”

我的原始数据格式如下:

ID |月| PRICE

1 | 11 | 20.36

2 | 12 | 11.05

基本上我想在右边添加移动平均线。

2 个答案:

答案 0 :(得分:3)

这可能是你想要的,移动平均线超过了汇总价格:

SELECT month, SUM(prices),
 round(AVG(SUM(prices)) OVER
   (ORDER BY month ROWS BETWEEN 1 PRECEDING AND CURRENT ROW),2)
    AS MA
    FROM tblma
    GROUP BY month
    ORDER BY month;

答案 1 :(得分:1)

问题在于您尝试选择prices但没有聚合表达式,或按价格分组。如果您删除prices,只需执行SELECT month, round(AVG(SUM(prices))即会返回一些内容。您无法选择prices的原因是,如果您在同一个月内有多个价格,那么您尚未指定如何处理此问题。

此外,round(AVG(SUM))只会返回值的舍入SUM。它将首先对所有内容求和,然后取该数字的平均值,这将是数字本身。