aggregation

2017-09-12  本文已影响0人  xncode

aggregate

除了count,默认是使用该属性加方法来命名返回结果的key值,但可以指定

Book.objects.count()
# 200
Book.objects.all().aggregate(Avg('price'))  # Max
# {'price__avg': 34.45}
Book.objects.all().aggregate(price_avgnum=Avg('price'))  # 指定了返回结果的字段名称
# {'price_avgnum': 34.45}

price_diff=Max('price', output_filed=FloatField()) - Avg('price'))  # 可进行运算
   
Book.objects.aggregate(Avg('price'), Max('price'), Min('price'))
# {'price__avg': 34.35, 'price__max': Decimal('81.20'), 'price__min': Decimal('12.99')}

annotate

pubs = Publisher.objects.annotate(num_books=Count('book'))
# pubs -> list
# pubs[0].num_books

同时拿count多值出来可能会有问题,即使用的是join而不是子查询。可以使用:

Book.objects.annotate(Count('authors', distinct=True), Count('store', distinct=True))
上一篇 下一篇

猜你喜欢

热点阅读