Django: aggregation-of-aggregation с подзапросом: cannot-compute-avg-is-an-aggregate

Я занимаюсь разведкой и тестированием уже довольно долгое время и не могу заставить что-либо работать с MariaDB.

У меня есть подзапрос:

rating_average_by_puzzle_from_completion_plays = Play.objects.filter(completion_id=OuterRef('id')).values('puzzle_id').order_by('puzzle_id').annotate(puzzle_rating_average=Avg('rating')).values('puzzle_rating_average')

где рейтинги всех игр, соответствующих данному завершению, усредняются на puzzle_id

После этого я пытаюсь для каждого завершения усреднить puzzle_rating_average, соответствующий каждому puzzle_id:

если я делаю annotate, то в итоге получаю :

SequenceCompletion.objects.annotate(rating_avg_from_completion_plays=Subquery(rating_average_by_puzzle_from_completion_plays.annotate(result=Avg('puzzle_rating_average')).order_by().values('result')))


django.core.exceptions.FieldError: Cannot compute Avg('puzzle_rating_average'): 'puzzle_rating_average' is an aggregate

если я делаю aggregate, то в итоге получаю :

SequenceCompletion.objects.annotate(rating_avg_from_completion_plays=Subquery(rating_average_by_puzzle_from_completion_plays.aggregate(result=Avg('puzzle_rating_average')).order_by().values('result')))


ValueError: This queryset contains a reference to an outer query and may only be used in a subquery.

Я тоже пробовал:

SequenceCompletion.objects.annotate(rating_avg_from_completion_plays=Avg(Subquery(rating_average_by_puzzle_from_completion_plays)))

и в итоге я получаю:

MySQLdb._exceptions.OperationalError: (1242, 'Subquery returns more than 1 row'

Ничто из того, что я смог найти в документации или в любом сообщении, не работает, поэтому я буду благодарен за любую помощь

Вернуться на верх