如果我有一个聚合,我可以得到查询中值的平均值,而不用在 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')
分组,因为里面的 .annotate(...math here...)
操作不是 distributive 跨 Model
对象。 最佳答案
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_field
是 Sum
的参数,而不是 annotate()
。关于django - 如何计算django中聚合的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38021616/