075: 【Django数据库】ORM聚合函数详解-Sum
ORM聚合函数详解-Sum:
Sum :求指定对象的总和。比如要求图书的销售总额。那么可以使用以下代码实现:
from djang.db.models import Sum result = Book.objects.annotate(total=Sum("bookstore__price")).values("name","total")
以上的代码 annotate 的意思是给 Book 表在查询的时候添加一个字段叫做 total ,这个字段的数据来源是从 BookStore 模型的 price 的总和而来。 values 方法是只提取 name 和 total 两个字段的值。
不多说了,直接上代码吧:
# views.py内容: def index(request): # 所有书的销售总额: # total = BookOrder.objects.aggregate(total=Sum("price")) # print(total) # 每种书的销售总额: # books = Book.objects.annotate(total=Sum("bookorder__price")) # for item in books: # print(item.name, item.total) # print(books.query) # 求2019年度销售总额: # total = BookOrder.objects.filter(create_time__year=2019).aggregate(sum=Sum("price")) # print(total) # 求2019年每种书的度销售总额: total = Book.objects.filter(bookorder__create_time__year=2019).annotate(sum=Sum("price")) for item in total: print(item.name, item.sum) print(total.query) return HttpResponse("success")
实例截图如下:
更多的聚合函数请参考官方文
档:https://docs.djangoproject.com/en/2.0/ref/models/querysets/#aggregation-functions