Django: aggregierten Wert der beiden multiplizierten Spalten erhalten
-
18-09-2019 - |
Frage
ich brauche aggregierten Wert von zwei Spalten zu erhalten. Also zunächst mehrere sie zusammen und dann ihren sum()
bekommen. Code unten natürlich nicht funktioniert, es nur zur Klarstellung ist.
Ist es irgendwie möglich, oder soll ich roh SQL verwenden?
SomeModel.objects
.filter(**something)
.aggregate(Sum('one_column' * 'another_col'))
Lösung
Sie müssen nicht so viel rohe SQL mit extra () .
obj = SomeModel.objects.filter(**something).extra(
select = {'total': 'SUM(one_column * another_column)'},
)
Andere Tipps
Wie ich hier beantwortet https://stackoverflow.com/a/36024089/4614802 die richtige Lösung ist abhängig von django Version.
- Für django <1.8 Verwendung
.aggregate(Sum('field1', field="field1*field2"))
- Für django> = 1,8 Verwendung
.aggregate(Sum(F('field1')*F('field2'))
Dies ist sparta. Auf diese Weise, wenn Sie es irgendwo in einer Vorlage drucken wollen, müssen Sie etwas verwenden:
{{ queryset.0.total }}
Das wurde richtig beantwortet hier: Django Aggregation: Aufsummierung der Multiplikation zwei Felder
Die Form ist:
agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2"))
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow