Subtracting two annotated columns

后端 未结 2 1201
伪装坚强ぢ
伪装坚强ぢ 2020-12-20 11:13

I need to be able to sort on the aggregate of two annotated columns

So I\'d like to do something like this:

c = c.annotate(metric=Sum(\'results__metr         


        
相关标签:
2条回答
  • 2020-12-20 11:41

    Ticket is there for more than 4 years (by 2014), but it can be accomplished with a little .extra() query, like this:

    items = MyModel.objects.extra(
        select = {'variance': 'SUM(relatedModel__someField) - SUM(relatedModel__someField)'},
    )
    

    Yes, it can be a bit unpredictable with different DBMS. But if you limit the syntax inside extra to very common SQL it should work more or less everywhere.

    0 讨论(0)
  • 2020-12-20 11:50

    Actually,

    c = c.annotate(variance=F('metric')-F('metric_prior'))
    

    works as you would like it to starting with Django 1.8.

    Moreover, you can also order by an expression, which means you can just use:

    c = c.order_by(F('metric') - F('metric_prior'))
    

    or even just:

    c = c.order_by(Sum('results__metric') - Sum('results__metric_prior'))
    
    0 讨论(0)
提交回复
热议问题