如果我有一个聚合,我可以在查询中获得值的平均值,而无需在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...)
个对象。
答案 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_field
是Sum
的参数,而不是annotate()
。