Django能否同时对某些列分组并对其他列求和?
就像下面这个查询:
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里出现了重复的值,我也不知道……