Вложенные агрегированные функции - SQL

Я хочу сделать SQL-запрос, который найдет категорию премий за фильмы с самым высоким средним рейтингом, поэтому для группы фильмов, получивших определенную награду, если они имеют более высокий средний рейтинг, чем любая другая группа наград фильмов, то он будет возвращен.

Я пробовал что-то вроде этого:

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

но кажется, что совокупные функции не могут быть вложенными. Как я могу назвать функцию max в среднем для каждой категории?

Ответ 1

Если вас интересует только значение, это должно сделать следующее:

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

В противном случае решение Адриана будет лучше.

Ответ 2

Это принесет желаемый результат:

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

Это позволит вам не только получить значение MAX, но его соответствующую Award info

Ответ 3

Вы пробовали это?

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

Ответ 4

Другой способ заключается в использовании оконного MAX:

SELECT MAX(AVG(m."Rating")) OVER()
FROM awards a -- proper JOIN syntax
JOIN movies m ON a."Title" = m."Title"     
GROUP BY a."Award"
LIMIT 1;

ДБ <> Fiddle Demo