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'))