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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM