075: 【Django資料庫】ORM聚合函式詳解-Sum
阿新 • • 發佈:2019-01-09
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