django ORM聚合函式
在Django中,聚合函式是通過aggregate方法實現的,aggregate方法返回的結果是一個字典
在使用時需要先匯入模組from django.db.models import Count,Avg,Max,Min,Sum
假設有一個模型
class Book(models.Model): name = models.CharField(max_length=100) pages = models.IntegerField() price = models.FloatField() author = models.CharField(max_length=100)class Meta: db_table='book'
Avg:求平均值
avgprice=Book.objects.aggregate(Avg('price'))
print(avgprice) 列印結果為{"price__avg":23.0}
預設的別名結構為field__方法小寫,如果要自定義返回結果樣式,可以將結果賦值給一個關鍵字引數,例如
avgprice=Book.objects.aggregate(my_avg=Avg('price')),則列印結果為{my_avg":23.0}
可通過print(avgprice.queries)檢視系統轉化為的原生sql語句(先匯入from django.db import connection)
count:獲取個數,預設不去重
bookcount = Book.objects.aggregate(book_num=Count('id'))
在count中,如果要過濾重複值,可新增引數distinct,即book_num=Count(book_num='name',distinct=True)
Max 和 Min:最大值和最小值
max_price=Book.objects.aggregate(max_price=Max('price'))
min_price=Book.objects.aggregate(min_price=Min('price'))
Sum:總和
sum=Book.objects.aggregate(sum_price=Sum('price'))