W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
Django 提供了兩種生成聚合的方法。第一種方法是從整個(gè) ?QuerySet
?生成匯總值。比如你想要計(jì)算所有在售書(shū)的平均價(jià)格。Django 的查詢語(yǔ)法提供了一種用來(lái)描述所有圖書(shū)集合的方法:
>>> Book.objects.all()
可以通過(guò)在 ?QuerySet
?后添加 ?aggregate()
? 子句來(lái)計(jì)算 ?QuerySet
?對(duì)象的匯總值。
>>> from django.db.models import Avg
>>> Book.objects.all().aggregate(Avg('price'))
{'price__avg': 34.35}
本例中的 ?all()
? 是多余的,所以可以簡(jiǎn)化成這樣的:
>>> Book.objects.aggregate(Avg('price'))
{'price__avg': 34.35}
傳遞給 ?aggregate()
? 的參數(shù)描述了我們想要計(jì)算的聚合值。在這個(gè)例子里,要計(jì)算的就是 Book 模型上的 price 字段的平均值。
?aggregate()
? 是 QuerySet 的一個(gè)終端子句,使用后將返回“name-value”的字典,其中“name”就是聚合值的標(biāo)志,“value”就是計(jì)算出的聚合結(jié)果?!皀ame”是根據(jù)字段名和聚合函數(shù)而自動(dòng)生成的。如果你想指定一個(gè)聚合值的名稱,你可以在指定聚合子句的時(shí)候提供指定的名稱:
>>> Book.objects.aggregate(average_price=Avg('price'))
{'average_price': 34.35}
如果你想生成更多的聚合內(nèi)容,你需要在 ?aggregate()
? 子句中加入其它參數(shù)即可。所以,如果我們也想知道所有書(shū)中最高和最低的價(jià)格,我們可以寫這樣的查詢:
>>> from django.db.models import Avg, Max, Min
>>> Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
{'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: