【发布时间】:2018-01-31 06:14:29
【问题描述】:
我想获取 MyModel order_by('-end_date') 的最后 100 条记录,并对不同的获胜者类型进行 SUM 注释
MyModel.objects.all()[:100].order_by('-end_game_time').values('winner').annotate(total=Count('winner'))
结果查询如下,我没有预期的组
<QuerySet [{'winner': 3, 'total': 1}, {'winner': 15, 'total': 1}, 'total': 1}, {'winner': 3, 'total': 1}, {'winner': 5, 'total': 1}, {'winner': 15, 'total': 1}, {'winner': 5, 'total': 1}, {'winner': 3, 'total': 1}, '...(remaining elements truncated)...']>
生成的查询就像
SELECT "game_mymodel"."winner", COUNT("game_mymodel"."winner") AS "total" FROM "game_mymodel" GROUP BY "game_mymodel"."winner", "game_mymodel"."end_game_time" ORDER BY "game_mymodel"."end_game_time" DESC LIMIT 100
但是当我没有 order_by 时,结果与我预期的一样
MyModel.objects.all()[:100].values('winner').annotate(total=Count('winner'))
Out[52]: <QuerySet [{'winner': 5, 'total': 43}, {'winner': 1, 'total': 2}, {'winner': 15, 'total': 51}, {'winner': 2, 'total': 42}, {'winner': 3, 'total': 43}]>
和生成的查询group_by部分不同
SELECT "game_mymodel"."winner", COUNT("game_mymodel"."winner") AS "total" FROM "game_mymodel" GROUP BY "game_mymodel"."winner" LIMIT 100
【问题讨论】:
标签: django django-models