汇总具有相同字段值的查询项

时间:2019-11-11 16:57:55

标签: django django-orm aggregation

我的一个查询集返回具有多个字段的项目列表:

<QuerySet [{'name': 'John', 'products': 4}, {'name': 'John', 'products': 6}, {'name': 'Sam', 'products': 7}, ...]>

对于具有相同Sum()字段的元素,我该如何汇总这些数据以得到products值的name组合,以避免在查询集中重复,因此我将得到一些东西像这样:

<QuerySet [{'name': 'John', 'products': 10}, {'name': 'Sam', 'products': 7}, ...]>

我知道应该使用.annotate().aggregate()查询来完成此操作,但我不知道该怎么做。

2 个答案:

答案 0 :(得分:2)

您需要的是annotate,您可以执行以下操作:

from django.db.models import Sum

your_queryset = YourModel.objects.annotate(total_products=Sum('products')).values_list('name', 'total_products')

您可以通过查看docs

了解更多信息

答案 1 :(得分:2)

您可以使用以下方法构造此类查询集:

from django.db.models import Sum

Model.objects.values('name').annotate(
    sum_products=Sum('products')
).order_by('name')

.order_by(..)是强制Django使用GROUP BY子句所必需的。