Pergunta

Eu preciso para obter o valor agregado das duas colunas. Então, primeiro múltipla-los juntos e, em seguida, obter deles sum(). Código abaixo naturalmente não funciona, é apenas para esclarecimentos.

É de alguma forma possível ou devo usar SQL cru?

SomeModel.objects
    .filter(**something)
    .aggregate(Sum('one_column' * 'another_col'))
Foi útil?

Solução

Você não precisa que o SQL muito cru usando Extra () .

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

Outras dicas

Como eu respondida aqui https://stackoverflow.com/a/36024089/4614802 a solução correta depende Django versão.

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

Esta é Esparta. Desta forma, se você quiser imprimi-lo em algum lugar em um modelo que você tem que usar algo como isto:

{{ queryset.0.total }}

Este foi corretamente respondida aqui: Django Agregação: Soma de Multiplicação de dois campos

O formulário é:

agg = Task.objects.all().aggregate(total=Sum('field1', field="field1*field2"))
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top