Поиск максимального значения для столбца, сгруппированного по столбцу в другой таблице - PullRequest
0 голосов
/ 06 мая 2020

Schemea

Я пытаюсь написать запрос для приведенной выше базы данных / таблиц, который будет возвращать каждый директор с самым высоким рейтингом mov ie.

Я пробовал:

SELECT d.id, md.movie_id, m.name, m.year, MAX(m.rank)
FROM directors d
INNER JOIN movies_directors md
ON d.id = md.director_id
INNER JOIN movies m
ON md.movie_id = m.id
GROUP BY d.id

но возвращается:

[Code: 8120, SQL State: S0001]  Column 'movies_directors.movie_id' is invalid in the select list 
because it is not contained in either an aggregate function or the GROUP BY clause.

1 Ответ

1 голос
/ 06 мая 2020

Это проблема с топ-1 на группу. Вместо агрегирования нужна какая-то логика фильтрации c.

Обычно для этого можно использовать row_number():

select *
from (
    select 
        d.id, 
        md.movie_id, 
        m.name, 
        m.year, 
        row_number() over(partition by d.id order by m.rank desc) rn
    from directors d
    inner join movies_directors md on d.id = md.director_id
    inner join movies m on md.movie_id = m.id
) t
where rn = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...