繁体   English   中英

Django根据值从queryset获得不同的结果

[英]Django get distinct results from queryset based on value

在这里,我有查询结果

<QuerySet [{'user__first_name': 'aakash', 'user__id': 1, 'games_played': 1}, {'user__first_name': 'prakash', 'user__id': 2, 'games_played': 2}, {'user__first_name': 'prakash', 'user__id': 2, 'games_played': 2}]>

我的查询是

Games.objects.filter(Match__player__id=1).values('user__first_name', 'user__id').annotate(games_played=Count(Case(When(Q(status=Games.COMPLETE), then='id'))))

所以在这里我希望用户prakash或user__id = 2一次。

您需要在末尾添加.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')))
).order_by('user__first_name', 'user__id', 'accounts__id')

但是请注意,这里的JOIN将充当“乘数”:您将id的数量乘以玩家具有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')), distinct=True)
).order_by('user__first_name', 'user__id', 'accounts__id')

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM