2009-12-09 22 views
7

Ho bisogno di ottenere il valore aggregato di due colonne. Quindi per prima cosa li riunisci e poi ottieni il loro sum(). Il codice qui sotto naturalmente non funziona, è solo per chiarimenti.Django: ottieni il valore aggregato di due colonne moltiplicate

È in qualche modo possibile o dovrei utilizzare SQL raw?

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

risposta

10

Non hai bisogno di tanto SQL grezzo utilizzando extra().

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

Questo è sparta. In questo modo, se si desidera stampare da qualche parte in un modello è necessario utilizzare qualcosa di simile:

{{ queryset.0.total }} 

Questo è stato risposto correttamente qui: Django Aggregation: Summation of Multiplication of two fields

La forma è:

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

Come ho risposto qui https://stackoverflow.com/a/36024089/4614802 la soluzione corretta dipende dalla versione di django.

  • per Django < 1.8 uso .aggregate(Sum('field1', field="field1*field2"))
  • per Django> = 1.8 uso .aggregate(Sum(F('field1')*F('field2'))
Problemi correlati