7

我需要获得两列的聚合值。所以首先将它们组合在一起,然后得到它们的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 回答
1

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

{{ queryset.0.total }}

这在这里得到了正确的回答:Django Aggregation: Summation of Multiplication of two fields

表格是:

agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2"))
于 2014-12-09T12:40:13.333 回答