Django: получить агрегированное значение двух умноженных столбцов

мне нужно получить агрегированное значение из двух столбцов. Так что сначала несколько их вместе, а затем получить их sum(). Код естественно не работает, это просто для уточнения.

это как-то возможно или я должен использовать raw SQL?

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

3 ответов


вам не нужно столько raw SQL, используя extra ().

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

Это Спарта. Таким образом, если вы хотите напечатать его где-нибудь в шаблоне, вы должны использовать что-то вроде этого:

{{ queryset.0.total }}

на это здесь правильно ответили:агрегация Django: суммирование умножения двух полей

форма:

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

Как я ответил Здесь https://stackoverflow.com/a/36024089/4614802 правильное решение зависит от версии Джанго.

  • для django .aggregate(Sum('field1', field="field1*field2"))
  • для django > = 1.8 использовать .aggregate(Sum(F('field1')*F('field2'))