Вам нужно добавить .order_by
в конце, чтобы заставить набор запросов «свернуть»:
Games.objects.filter(
Match__player__id=1
).values(
'user__first_name', 'user__id', 'accounts__id'
).annotate(
games_played=Count(Case(When(Q(status=Games.COMPLETE), then='id')))
)<b>.order_by('user__first_name', 'user__id', 'accounts__id')</b>
Обратите внимание, что здесь JOIN
s будет действовать как «множитель»: вы посчитаете количество идентификаторов , умноженное на количество матчей, в которых у игрока id=1
.
Возможно, вы захотите добавить distinct=True
, чтобы избежать этого в Count(..)
:
Games.objects.filter(
Match__player__id=1
).values(
'user__first_name', 'user__id', 'accounts__id'
).annotate(
games_played=Count(Case(When(Q(status=Games.COMPLETE), then='id'))<b>, distinct=True</b>)
).order_by('user__first_name', 'user__id', 'accounts__id')