Вложенные агрегированные функции - 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