Ho il seguente modello di Django (mappato alla tabella 'A'):interrogazione Django - "caso in cui" con la funzione di aggregazione
class A(models.Model):
name = models.CharField(max_length=64, null=False)
value = models.IntegerField()
...
voglio eseguire la seguente query semplice in cima:
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 ...
Sto cercando di evitare il raw SQL - Come può essere implementato con django (nell'esempio sopra sto usando avg, ma la stessa domanda è rilevante anche per max, min, somma ecc.)?
Ho provato ad utilizzare in più e di aggregazione:
extra(select={'avg_field': case_when_query})
e
aggregate(Avg('avg_field')),
ma la funzione di aggregazione funziona solo con i campi del modello in modo che il campo aggiuntivo non può essere utilizzato qui. Come si può fare con django?
Grazie per l'aiuto
Grazie. Purtroppo non posso memorizzare questi valori nella tabella del database poiché i valori del "caso in cui" possono variare in base al calcolo che voglio eseguire. – Lin
@Li: capito. Posso capire perché questo non funzionerebbe in quel caso. –
Grazie ancora per l'aiuto. Alla fine usare valori extra + mi ha dato il risultato che volevo. – Lin