ORM分組與聚合
阿新 • • 發佈:2018-10-06
ack price 個數 gate ann all 技術分享 value count
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 = 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分組與聚合