嵌套聚合函数 - SQL

ste*_*eve 12 sql postgresql aggregate-functions

我想制作一个SQL查询,找到平均评分最高的电影奖项,所以对于一组获得特定奖项的电影,如果他们的平均评分高于其他任何一组电影那么它将被退回.

我试过这样的事情:

SELECT MAX(AVG(m."Rating"))
FROM awards a, movies m
WHERE a."Title" = m."Title"
GROUP BY a."Award"
Run Code Online (Sandbox Code Playgroud)

但似乎聚合函数不能嵌套.如何在每个类别的平均评级上调用max函数?

a_h*_*ame 11

如果您只对价值本身感兴趣,则应执行以下操作:

SELECT MAX(avg_rating)
FROM (
    SELECT AVG(m."Rating") as avg_rating
    FROM awards a, movies m
    WHERE a."Title" = m."Title"
    GROUP BY a."Award"
) t
Run Code Online (Sandbox Code Playgroud)

否则Adrian的解决方案会更好.


Adr*_*iro 7

这将带来您想要的结果:

SELECT a."Award", AVG(m."Rating")
FROM awards a, movies m
WHERE a."Title" = m."Title"
GROUP BY a."Award"
ORDER by AVG(m."Rating") desc
LIMIT 1
Run Code Online (Sandbox Code Playgroud)

这样您不仅可以获取MAX值,还可以获取相应的Award信息

  • @Julian我从来没有说过LIMIT是SQL标准.它解决了OP问题,因为LIMG也可用于PostGreSQL(不仅仅是MySQL!),这是OP的RDBMS. (6认同)

Jef*_*ock 4

你尝试过这个吗?

SELECT MAX(
   SELECT AVG(m."Rating")
   FROM awards a, movies m
   WHERE a."Title" = m."Title"
   GROUP BY a."Award"
)
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,但是“在 SELECT 处或附近”有一个语法错误。不确定那会是什么 (2认同)