Многоуровневая аннотация / агрегация с использованием 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";

0 ответов

Другие вопросы по тегам