【问题标题】:Django: get aggregated value of two multiplied columnsDjango:获取两个相乘列的聚合值
【发布时间】:2010-12-24 21:54:48
【问题描述】:

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

有可能还是我应该使用原始 SQL?

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

【问题讨论】:

    标签: django django-orm django-aggregation


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

      正如我在这里回答的https://stackoverflow.com/a/36024089/4614802 正确的解决方案取决于 django 版本。

      • 对于 django .aggregate(Sum('field1', field="field1*field2"))
      • 对于 django >= 1.8 使用.aggregate(Sum(F('field1')*F('field2'))

      【讨论】:

        【解决方案3】:

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

        {{ queryset.0.total }}
        

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

        形式为:

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

        【讨论】:

          猜你喜欢
          • 2012-08-23
          • 2019-01-15
          • 1970-01-01
          • 1970-01-01
          • 2018-08-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-08-19
          相关资源
          最近更新 更多