【问题标题】:ERROR: aggregate function calls cannot be nested错误:聚合函数调用不能嵌套
【发布时间】:2014-01-21 06:08:25
【问题描述】:

我正在尝试在以下查询中再包含一列,以显示其中两列的平均值。我是 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;

【问题讨论】:

  • 您只是想显示两个值的除法,还是列中所有值的平均值,按您明确的其他列分组?
  • 我用你的例子做了一个小提琴,看不出你为什么会出错,你能检查一下差异吗? sqlfiddle.com/#!15/be661/1
  • 我只需要显示两列的平均值,例如:avg(8/2) 还在另一列中进一步显示 avg(8+2/2),我是新手查询,所以可能是我犯了一个错误,请您纠正我在这种情况下我应该怎么做?
  • 谢谢亚历克斯,你是对的,我的表现和我的表现一样,我不知道为什么我在postgreSQL 中收到这个错误:(
  • 您是否有机会在另一个查询中运行此查询?

标签: sql postgresql average


【解决方案1】:

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

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

您需要尝试以下方式:

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

【讨论】:

  • 谢谢 d_ominic,是的,你是对的。我在单个查询中单独完成了相同的操作,但是如何在上面提到的已经有两个 inner join 的查询中集成相同的内容
  • 试过这样: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; 但仍然是同样的错误,如果我做错了什么请您纠正我吗?
  • 嗯,奇怪。制作小提琴 alex siri 后,您编辑的查询看起来没问题...您能告诉我们您正在使用的表结构和数据类型吗?
【解决方案2】:

我使用您的示例创建了a fiddle,您可以看到查询正常工作。这可能是包装查询、存储过程或函数中的错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-29
    • 1970-01-01
    • 2019-12-22
    相关资源
    最近更新 更多