2016-06-24 22 views
1

集合体を持つ場合、Pythonメモリで計算することなく、クエリの値の平均を取得できますか?djangoの集合体の平均を計算する方法

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 

クエリでsubtotal値のAvgを取得する方法はありますか?これは私がAvgを集計( "subtotal")で計算することはできませんが、.annotate(...math here...)操作がからModel個のオブジェクトではないため、.values('id')グループを置き換えることはできません。

答えて

2
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()ではありません。

+0

多くのおかげで、素晴らしい仕事をした。 – Escher

+0

私は同じ問題を抱えていますが、複数の(すでに)集約されたフィールドを平均化する必要があります。 'のようなものがあります。集計(合計=平均(F( 'subtotal_1')、F( '小計_2')、F( '小計_3')))'それは 'subtotal_1'が集計... ? [これは同様の質問です。](http://stackoverflow.com/questions/34911474/django-aggregation-sum-then-average) –

関連する問題