До сих пор мне не удалось преодолеть error aggregate function calls cannot contain window function calls
и я не нашел способа ограничить объединенную таблицу, которая не вызывала бы эту ошибку.
Я пробовал func.count(Video.id).label('rn')
вместо func.row_number().over(partition_by=role.c.movie_id).label('rn')
, что дает мне ошибку: aggregate function calls cannot be nested
и перемещение таблицы Actor в свой собственный подзапрос, который дает мне ошибку AttributeError: 'Alias' object has no attribute 'type'
sub_query = db.session.query(
func.json_build_object(
'movie_name', Movie.movie_name,
'movie_year', Movie.year,
'movie_description', Movie.description,
'Actors', func.array_agg(
func.json_build_object(
'actors_name', Actor.name,
'actors_age', Actor.age,
'rn', func.row_number().over(partition_by=role.c.movie_id).label('rn')
)
)
)
).group_by(Movie.movie_name, Movie.year, Movie.description, role.c.movie_id)\
.join(role, (role.c.movie_id == Movie.id)).join(Actor, (role.c.actor_id == Actor.id)).subquery()
query = db.session.query(sub_query).filter(text('rn <= 4'))