Django:得到两个相乘列的聚合值

时间:2009-12-09 16:41:02

标签: django django-orm django-aggregation

我需要获得两列的聚合值。因此,首先将它们组合在一起然后得到它们sum()。下面的代码自然不起作用,只是为了澄清。

它是否可能或我应该使用原始SQL?

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

3 个答案:

答案 0 :(得分:10)

使用extra(),您不需要那么多原始SQL。

obj = SomeModel.objects.filter(**something).extra(
    select = {'total': 'SUM(one_column * another_column)'},
)

答案 1 :(得分:2)

我在这里回答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'))

答案 2 :(得分:1)

这是sparta。这样,如果你想在模板中的某个地方打印它,你必须使用这样的东西:

{{ queryset.0.total }}

此处已正确回答:Django Aggregation: Summation of Multiplication of two fields

表格是:

agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2"))