Django:获取两个相乘列的聚合值

Posted

技术标签:

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

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

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

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

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

正如我在这里回答的https://***.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"))

【讨论】:

以上是关于Django:获取两个相乘列的聚合值的主要内容,如果未能解决你的问题,请参考以下文章

Impala 查询以获取计数聚合函数中使用的列的样本值

Django Query 获取 ArrayField 列的所有不同值的计数

Django Query以获取特定列的所有不同值的计数[重复]

sql 查询两个列的值相加或者相乘

Django Aggregation - 试图返回两个值

SQL聚合函数