聚合具有相同字段值的查询项
Aggregating query items with the same field value
我的一个查询集 returns 具有多个字段的项目列表:
<QuerySet [{'name': 'John', 'products': 4}, {'name': 'John', 'products': 6}, {'name': 'Sam', 'products': 7}, ...]>
我如何聚合这些数据以获得具有相同 name
字段的元素的 Sum()
的 products
值的组合,以避免查询集中的重复,因此我将有这样的东西:
<QuerySet [{'name': 'John', 'products': 10}, {'name': 'Sam', 'products': 7}, ...]>
我知道这应该使用 .annotate()
或 .aggregate()
查询来完成,但我不知道如何做。
你需要的是annotate
,你可以这样做:
from django.db.models import Sum
your_queryset = YourModel.objects.annotate(total_products=Sum('products')).values_list('name', 'total_products')
您可以通过查看 docs
了解更多信息
你可以构造这样的查询集:
from django.db.models import Sum
Model.objects.values('name').annotate(
<b>sum_products=Sum('products')</b>
).order_by(<b>'name'</b>)
.order_by(..)
是强制 Django 使用 GROUP BY 子句所必需的。
我的一个查询集 returns 具有多个字段的项目列表:
<QuerySet [{'name': 'John', 'products': 4}, {'name': 'John', 'products': 6}, {'name': 'Sam', 'products': 7}, ...]>
我如何聚合这些数据以获得具有相同 name
字段的元素的 Sum()
的 products
值的组合,以避免查询集中的重复,因此我将有这样的东西:
<QuerySet [{'name': 'John', 'products': 10}, {'name': 'Sam', 'products': 7}, ...]>
我知道这应该使用 .annotate()
或 .aggregate()
查询来完成,但我不知道如何做。
你需要的是annotate
,你可以这样做:
from django.db.models import Sum
your_queryset = YourModel.objects.annotate(total_products=Sum('products')).values_list('name', 'total_products')
您可以通过查看 docs
了解更多信息你可以构造这样的查询集:
from django.db.models import Sum
Model.objects.values('name').annotate(
<b>sum_products=Sum('products')</b>
).order_by(<b>'name'</b>)
.order_by(..)
是强制 Django 使用 GROUP BY 子句所必需的。