错误:无法嵌套聚合函数调用

时间:2014-01-21 06:08:25

标签: sql postgresql average

我正在尝试在以下查询中再添加一列来显示其中两列的平均值。我是SQL和PostgreSQL的新手,但请参考以下链接http://www.postgresql.org/docs/9.3/interactive/index.html

select ad.col1, ad.col2, md.col3, ad.col4, mcd.col5, 
       AVG(md.col3/mcd.col4) as cb 
from month_date as md 
 JOIN active_date as ad ON ad.col1=md.col1 AND ad.col2=md.col2 
 JOIN mdata1 as mcd ON mcd.col1=md.col1 AND mcd.col2=md.col2;

但执行相同的

时出现以下错误
ERROR:  aggregate function calls cannot be nested
LINE 1: ...col2,md.col3,ad.col4,mcd.col5, AVG(md.col3/m...
                                                             ^

********** Error **********

ERROR: aggregate function calls cannot be nested
SQL state: 42803
Character: 77

任何人都可以指导我做错的地方以及我需要纠正以使其正常工作。

需要输出:

col1 | col2 | col3 |col4 | col5| cb|

其中cb是其他两列的average列。

任何帮助都将不胜感激。

[编辑]

尝试Group By但仍然遇到同样的错误,任何人都可以纠正我在下面的查询中做错了什么

select ad.col1, ad.col2, md.col3, ad.col4, mcd.col5, 
       AVG(md.col3/mcd.col4) as cb 
from month_date as md 
 JOIN active_date as ad ON ad.col1=md.col1 AND ad.col2=md.col2 
 JOIN mdata1 as mcd ON mcd.col1=md.col1 AND mcd.col2=md.col2 GROUP BY ad.col1,ad.col2,md.col3,ad.col4,mcd.col5;

2 个答案:

答案 0 :(得分:2)

要在SQL中使用AVG()或任何类型的聚合函数,您需要为要显示的其他列使用GROUP BY。

可以这样想,当您选择一列时,您会显示行。显示平均值时,显示单个输出。您不能将行和单个输出放在一起。

你需要尝试以下方面:

SELECT col1, col2, AVG(col3)
FROM table1
GROUP BY col1, col2

答案 1 :(得分:-2)

我使用您的示例创建了a fiddle,您可以看到查询是否有效。它可能是包装查询,存储过程或函数中的错误。