7

2 つの列の集計値を取得する必要があります。したがって、最初にそれらをまとめてから、それらを取得しsum()ます。以下のコードは当然機能しません。これは説明のためのものです。

それはどういうわけか可能ですか、生のSQLを使用する必要がありますか?

SomeModel.objects
    .filter(**something)
    .aggregate(Sum('one_column' * 'another_col'))
4

3 に答える 3

10

extra()を使用すると、それほど多くの生の SQL は必要ありません。

obj = SomeModel.objects.filter(**something).extra(
    select = {'total': 'SUM(one_column * another_column)'},
)
于 2009-12-09T17:48:46.810 に答える
3

ここで答えたようにhttps://stackoverflow.com/a/36024089/4614802 正しい解決策は、django のバージョンによって異なります。

  • django < 1.8 の場合.aggregate(Sum('field1', field="field1*field2"))
  • django >= 1.8 の場合.aggregate(Sum(F('field1')*F('field2'))
于 2016-03-15T23:28:18.720 に答える