1. 程式人生 > >ORM分組與聚合

ORM分組與聚合

ack price 個數 gate ann all 技術分享 value count

技術分享圖片

技術分享圖片

#########################聚合################################
#查詢所有書籍的價格和 字典
ret = Book.objects.all().aggregate(price_sum=Sum("price"))
print(ret)

# 查詢所有作者的平均年齡 字典
ret=Author.objects.all().aggregate(sum_age=Avg("age"))
print(ret)

#########################分組###############################
‘‘關鍵點:


  1.QuerySet對象.annotate()
  2.annotate進行分組統計,按前面values中的字段進行分組
  3.annotate()返回值依然是QuerySet對象
‘‘‘
# 查詢每一個作者的名稱以及出版過的書籍最高價格
ret = Author.objects.values("name").annotate(max_price = Max("book__price")).values("name","max_price")
print(ret)

# 查詢每一個出版社的名稱以及出過的書籍的平均價格
ret=Publish.objects.values("name").annotate(book_price=Avg("book__price")).values("name","book_price")
print(ret)

# 查詢每一本書籍的作者個數
ret=Book.objects.values("title").annotate(count=Count("authors")).values("title","count")
print(ret)

ORM分組與聚合