ich habe folgendes django-Modell (abgebildet auf den Tisch ‚A‘):Django Abfrage - „Fall, wenn“ mit Aggregationsfunktion
select avg(case
when (value > 0 and value <= 50) then 0
when (value > 50 and value < 70) then 50
else 100 end)
from A
where ...
:
class A(models.Model):
name = models.CharField(max_length=64, null=False)
value = models.IntegerField()
...
ich folgende einfache Abfrage auf ausführen möchten
Ich versuche, rohe SQL zu vermeiden - Wie kann dies mit Django implementiert werden (im obigen Beispiel verwende ich avg, aber die gleiche Frage ist auch relevant für max, min, Summe usw.)?
habe ich versucht, mit extra und Aggregate:
extra(select={'avg_field': case_when_query})
und
aggregate(Avg('avg_field')),
aber die Aggregatfunktion funktioniert nur mit Modellfeldern so dass das zusätzliche Feld hier nicht verwendet werden kann. Wie kann das mit Django gemacht werden?
Danke für die Hilfe
Dank. Leider kann ich diese Werte nicht in der Datenbanktabelle speichern, da die "case when" -Werte abhängig von der Berechnung, die ich ausführen möchte, variieren können. – Lin
@Li: verstanden. Ich kann sehen, warum das in diesem Fall nicht funktionieren würde. –
Danke nochmal für die Hilfe. Irgendwann mit extra + Werten hat mir das Ergebnis gebracht, das ich wollte. – Lin