我正在尝试在以下查询中再添加一列来显示其中两列的平均值。我是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;
答案 0 :(得分:2)
要在SQL中使用AVG()或任何类型的聚合函数,您需要为要显示的其他列使用GROUP BY。
可以这样想,当您选择一列时,您会显示行。显示平均值时,显示单个输出。您不能将行和单个输出放在一起。
你需要尝试以下方面:
SELECT col1, col2, AVG(col3)
FROM table1
GROUP BY col1, col2
答案 1 :(得分:-2)
我使用您的示例创建了a fiddle,您可以看到查询是否有效。它可能是包装查询,存储过程或函数中的错误。