2009-12-09 23 views
7

Necesito obtener el valor agregado de dos columnas. Así que primero multiplíquelos juntos y luego obtenga el suyo sum(). El código a continuación, naturalmente, no funciona, es solo por aclaración.Django: obtener el valor agregado de dos columnas multiplicadas

¿Es de alguna manera posible o debo usar SQL sin formato?

SomeModel.objects 
    .filter(**something) 
    .aggregate(Sum('one_column' * 'another_col')) 

Respuesta

10

No necesita mucho SQL sin formato usando extra().

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

Esto es sparta. De esta manera, si se desea imprimir en algún lugar de una plantilla que tiene que usar algo como esto:

{{ queryset.0.total }} 

Esto fue correctamente respondida aquí: Django Aggregation: Summation of Multiplication of two fields

La forma es:

agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2")) 
1

Como he respondido aquí https://stackoverflow.com/a/36024089/4614802 la solución correcta depende de la versión de django.

  • Para Django 1.8 < uso .aggregate(Sum('field1', field="field1*field2"))
  • Para Django> = 1.8 uso .aggregate(Sum(F('field1')*F('field2'))
Cuestiones relacionadas