Django SUM查询?
我有一个类似下面的查询:
SELECT SUM(name) FROM table WHERE name IS NULL
那这个 SUM
在 Django 中是怎么变成 QuerySet
的呢?也就是说,它在像 MyModel.objects.xyz()
这样的操作中,具体对应什么操作 xyz
呢?
2 个回答
1
你还可以给返回的值起个别名:
MyModel.objects.aggregate(total=Sum('field_1'))
这样会返回一个字典,比如 {'total': 12345}
。
如果你需要过滤一下要加总的值,另一种方法是通过 Q
对象使用 Sum
对象的 filter=
参数。下面的代码会返回 field_1
的总和,前提是对应的 field_2
的值是空的,也就是相当于 SQL 查询 SELECT SUM(field_1) FROM table WHERE field_2 IS NULL
。
from django.db.models import Q, Sum
MyModel.objects.aggregate(total=Sum('field_1', filter=Q(field_2__isnull=True)))
你也可以用一个字典来存储总和,然后在传给 aggregate()
时解包成关键字参数。
dct = {'total': Sum('field_1', filter=Q(field_2__isnull=True))}
MyModel.objects.aggregate(**dct)
这两种方式都会返回一个字典,比如 {'total': 1234}
。
214
更新:下面的内容包含了原始查询中的ISNULL部分:
from django.db.models import Sum
ModelName.objects.filter(field_name__isnull=True).aggregate(Sum('field_name'))
# returns {'field_name__sum': 1000} for example
你需要的是求和的聚合函数,它的工作原理如下:
ModelName.objects.aggregate(Sum('field_name'))
查看: https://docs.djangoproject.com/en/dev/ref/models/querysets/#sum