如果我有一个聚合,我可以得到查询中值的平均值,而不用在 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...) 操作不是 distributiveModel 对象。

最佳答案

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()

关于django - 如何计算django中聚合的平均值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38021616/

10-11 07:22