1. 程式人生 > >django ORM聚合函式

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'))