ORMを介して作成したい非常に単純なクエリがありますが、それを理解できません。
私は3つのモデルを持っています:
場所(場所)、属性(場所が持つ可能性のある属性)、および評価(スコアフィールドも含むM2M 'から'モデル)
いくつかの重要な属性を選択し、それらの属性によって自分の場所をランク付けできるようにしたい-つまり、選択したすべての属性よりも合計スコアが高い=より良い。
次のSQLを使用して、必要なものを取得できます。
select location_id, sum(score)
from locations_rating
where attribute_id in (1,2,3)
group by location_id order by sum desc;
戻る
location_id | sum
-------------+-----
21 | 12
3 | 11
ORMで取得できる最も近いものは次のとおりです。
Rating.objects.filter(
attribute__in=attributes).annotate(
acount=Count('location')).aggregate(Sum('score'))
どちらが戻る
{'score__sum': 23}
つまり、場所ごとにグループ化されていない、すべての合計です。
これを回避する方法はありますか?SQLを手動で実行することもできますが、一貫性を保つためにORMを使用したいと思います。
ありがとう