Django能否同时对某些列分组并对其他列求和?

4 投票
3 回答
1561 浏览
提问于 2025-04-16 14:51

就像下面这个查询:

select sum(T.a), sum(T.b) from Table T group by T.c , T.d

在Django中有没有办法支持这种查询呢?

3 个回答

0

是的,Django支持这个功能,相关的文档可以在这里找到。

1

以下的方法对我有效:

>>> from django.db.models import Sum
>>> from myapp.models import T
>>> results = T.objects.values('c', 'd').annotate(Sum('a'), Sum('b'))
>>> print results.query
SELECT "myapp_t"."c", "myapp_t"."d", SUM("myapp_t"."a") AS "a__sum", SUM("myapp_t"."b") AS "b__sum" FROM "myapp_t" GROUP BY "myapp_t"."c", "myapp_t"."d"

想要了解更多,可以查看Django关于聚合的文档,里面有很多帮助信息。

5

这段内容差不多是这样:

class Test(models.Model):                                                                                          
    class Meta:                                                                                                    
        app_label = 'ignore'                                                                                       
        db_table = 'T'                                                                                             
    a = models.IntegerField()                                                                                      
    b = models.IntegerField()                                                                                      
    c = models.IntegerField()                                                                                      
    d = models.IntegerField()      

result = Test.objects.values('c', 'd').annotate(Sum('a'), Sum('b'))
print str(result.query)

结果是:

SELECT "T"."c", "T"."d", SUM("T"."a") AS "a_sum", SUM("T"."b") AS "b_sum" FROM "T" GROUP BY "T"."c", "T"."d", "T"."c", "T"."d"

至于为什么在GROUP BY里出现了重复的值,我也不知道……

撰写回答