J'ai le modèle suivant django (correspondance avec la table 'A'):requête Django - "cas où" avec la fonction d'agrégation
class A(models.Model):
name = models.CharField(max_length=64, null=False)
value = models.IntegerField()
...
Je veux effectuer la requête simple suivante au-dessus:
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 ...
J'essaie d'éviter le SQL brut - Comment cela peut-il être implémenté avec django (dans l'exemple ci-dessus j'utilise avg, mais la même question est également pertinente pour max, min, sum etc.)?
J'ai essayé avec supplémentaire et global:
extra(select={'avg_field': case_when_query})
et
aggregate(Avg('avg_field')),
mais la fonction globale fonctionne uniquement avec les champs de modèle de sorte que le champ supplémentaire ne peut être utilisé ici. Comment cela peut-il être fait avec django?
Merci pour l'aide
Merci. Malheureusement, je ne peux pas stocker ces valeurs dans la table de base de données, car les valeurs de "cas quand" peuvent varier en fonction du calcul que je veux effectuer. – Lin
@Li: compris. Je peux voir pourquoi cela ne fonctionnerait pas dans ce cas. –
Merci encore pour l'aide. Finalement, en utilisant des valeurs extra + m'a obtenu le résultat que je voulais. – Lin