2013-08-13 12 views
8
私はジャンゴで次のクエリを実行する必要があり

中:私はこれはあなたのDjangoのORMを使用して行うことができますどのようにどのように乗算と加算グループを持つ2つの列によってジャンゴ

SELECT sum(T.width * T.height) as amount 
FROM triangle T 
WHERE T.type = 'normal' 
GROUP BY S.color 

? 私はこの試みた:

Triangle.objects.filter(type='normal').\ 
       extra(select={'total':'width*height'}).\ 
       values('id', 'total').\ 
       annotate(amount=Sum('total')) 

をしかし、それは動作しません、私が手にエラーがTOTALがモデルではないということです。どうすれば修正できますか?

答えて

11

はここで何ができるかです:

Triangle.objects.filter(type="normal").values('color').annotate(amount=Sum('id', field="width * height") 

これは、次のクエリを生成します(私は読みやすくするために簡略化しました):

SELECT color, sum(width * height) as amount 
FROM triangle 
WHERE type = 'normal' 
GROUP BY color 

注:私はcolorを想定してきたがのフィールドです他のフィールドとしてTriangleモデル。

+0

ありがとうございました。あなたのソリューションは私を多く助けました。 – rodrixd

+0

これは文書化されていない機能ですか?私はDjango docs Aggregationページのどこにも表示されません。 https://docs.djangoproject.com/en/1.8/topics/db/aggregation/ – tufelkinder

+0

@tufelinder私はdjangoを使っていましたが、それはずっと前に投稿されました。ドキュメントをすばやく見た後、 'field'キーワードが文書化されていないことがわかります。あなたがドキュメンテーションの参考文献を見つけることができればうれしく思います。ありがとう! – alecxe

関連する問題