djangoのORM annotate()および/またはaggregate()を使用する:1つのカテゴリフィールドに基づいて合計し、日付ごとにカテゴリ値を平均したい。私は2つのannotate()ステートメントを使用してそれをしようとしましたが、FieldErrorを取得しました。私はこれをやっているdjango aggregation:sum then average
:
(カテゴリの各値に対してそれほど合計)のようなものでValuesQuerySetオブジェクトを出力queryset1 = self.data.values('date', 'category').annotate(sum_for_field=Sum('category'))
:
[{'category': 'apples', 'date': '2015-10-12', sum_for_field=2000},
{'category': 'carrots', 'date': '2015-10-12', sum_for_field=5000},
{'category': 'apples', 'date': '2015-10-13', sum_for_field=3000},
{'category': 'carrots', 'date': '2015-10-13', sum_for_field=6000}, ...
]
私はその後、sum_for_fieldを平均化したいですフィールドを以下のように出力します。
[ {'date': '2015-10-12', avg_final: 3500},
{'date': '2015-10-13', avg_final: 4500}, ...
]
私はこれを試しました:
queryset2 = queryset1.values('date', 'sum_for_field')
result = queryset2.annotate(avg_final=Avg('sum_for_field'))
しかし、私はこのFieldErrorだ:私は深いダイビングを行っていないが、私はあなたが注釈なしvalues()
を使用する場合、sum_for_field
値がものを共有してマージされていることを疑う
FieldError: FieldError: Cannot compute Avg('sum_for_field'): 'sum_for_field' is an aggregate
'.annotate()'を '.aggregate()'に変更する必要があります。詳細については、docsを参照してください。https://docs.djangoproject.com/en/1.9/topics/db/aggregation/ – jape
@japeこれを回答に追加しないでください。例](https://docs.djangoproject.com/en/1.9/topics/db/aggregation/#集約 - 注釈)。 – tutuDajuju
その例は私が望むものではありません。 – user1387717