如何计算django中聚合的平均值

时间:2016-06-24 20:29:12

标签: django django-queryset

如果我有一个聚合,我可以在查询中获得值的平均值,而无需在python内存中计算它吗?

from django.db.models import F, Sum, FloatField, Avg
Model.objects.filter(...)\
    .values('id')\
    .annotate(subtotal=Sum(...math here...), output_field=FloatField())\
    .annotate(total=Avg(F('subtotal'))) #this line throws a FieldError

有没有办法在查询中获取Avg subtotal个值?它给了我一个错误,我不允许在聚合上计算Avg(“subtotal”),但我无法替换.values('id')分组,因为{{1}内部的操作不是distributive.annotate(...math here...)个对象。

1 个答案:

答案 0 :(得分:4)

from django.db.models import F, Sum, FloatField, Avg
Model.objects.filter(...)\
    .values('id')\
    .annotate(subtotal=Sum(...math here..., output_field=FloatField()))\
    .aggregate(total=Avg(F('subtotal')))

Aggregating annotations。注意:output_fieldSum的参数,而不是annotate()