Question

Je dois obtenir la valeur agrégée des deux colonnes. Alors d'abord les multiples ensemble et ensuite obtenir leur sum(). Code ci-dessous ne fonctionne naturellement pas, il est juste pour la clarification.

Est-il possible d'une certaine manière ou devrais-je utiliser SQL cru?

SomeModel.objects
    .filter(**something)
    .aggregate(Sum('one_column' * 'another_col'))
Était-ce utile?

La solution

Vous n'avez pas besoin que l'utilisation de beaucoup SQL premières supplémentaire ().

obj = SomeModel.objects.filter(**something).extra(
    select = {'total': 'SUM(one_column * another_column)'},
)

Autres conseils

Comme je l'ai répondu ici https://stackoverflow.com/a/36024089/4614802 la bonne solution dépend de la version de django.

  • Pour django <1,8 utilisation .aggregate(Sum('field1', field="field1*field2"))
  • Pour django> = 1,8 utilisation .aggregate(Sum(F('field1')*F('field2'))

Ceci est sparte. De cette façon, si vous voulez imprimer quelque part dans un modèle que vous devez utiliser quelque chose comme ceci:

{{ queryset.0.total }}

Cela a été répondu correctement ici: Django agrégation: Sommation La multiplication des deux champs

La forme est la suivante:

agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2"))
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top