Многоуровневая аннотация / агрегация с использованием django ORM
Я пытался реализовать почти то же самое, что и в запросе на общую сумму
Поддерживает ли Django многоуровневую агрегацию? Я могу получить максимальный балл для каждого пользователя по каждой проблеме, но я не знаю, как уточнить мои результаты, чтобы соответствовать.
s = Submission.objects.values('challenge','user').annotate(Max('score'),Max('total_score'))
Это дает мне список разборок с пользователем, вызовом, total_score и счетом
То, что я хочу, это сумма баллов для каждого пользователя. Когда я использую агрегат по этому, я получаю сумму всех баллов
s.aggregate(Sum('total_score__max'),Sum(score__max))
SQL-запрос Postgres выглядит примерно так
select "user_id", SUM("score__max") as "score", SUM("total_score__max") as "total_score", COUNT("challenge_id") as "count" from
(SELECT "submission"."user_id", "submission"."challenge_id", MAX("submission"."score")
AS "score__max", MAX("submission"."total_score") AS "total_score__max" FROM "submission"
GROUP BY "submission"."user_id", "submission"."challenge_id")t GROUP BY "user_id" ORDER BY "user_id";