Django聚合聚合使用方法解析

  

在当今根据需求而不断调整而成的应用程序中,通常不仅需要能依常规的字段,如字母顺序或创建日期,来对项目进行排序,还需要按其他某种动态数据对项目进行排序.Djngo聚合就能满足这些要求。

  

以下面的模型为例

        django。数据库导入模型      类作者(models.Model):   name=models.CharField (max_length=100)   年龄=models.IntegerField ()   类的出版商(models.Model):   name=models.CharField (max_length=300)   num_awards=models.IntegerField ()   类的书(models.Model):   name=models.CharField (max_length=300)   页面=models.IntegerField ()   价格=模型。DecimalField (max_digits=10, decimal_places=2)   评级=models.FloatField ()   作者=models.ManyToManyField(作者)   出版商=models.ForeignKey(出版商)=models.DateField的作用是()   类商店(models.Model):   name=models.CharField (max_length=300)   书=models.ManyToManyField(书)   registered_users=models.PositiveIntegerField ()      

<强>快速了解
  

        #书总数量。   在在在Book.objects.count ()   2452      #图书出版商=BaloneyPress总数   在在在Book.objects.filter (publisher__name=BaloneyPress) .count ()   73      #书的平均价格。   在在在从django.db。模型导入Avg   在在在Book.objects.all () .aggregate (Avg(“价格”))   {“price__avg”: 34.35}      #书的最大的价格。   在在在从django.db。模型导入马克斯   在在在Book.objects.all () .aggregate (Max(“价格”))   {“price__max”:小数(81.20)}      #所有以下查询包括遍历Book<霭嫔?   #多对多关系落后      #为每个出版商添加个num_books属性,即每个pulisher出版的书的数量。   在在在从django.db。模型导入数   在在在酒吧=Publisher.objects.annotate (num_books=Count(书的))   在在在酒吧   [& lt;出版商BaloneyPress> & lt;出版商SalamiPress>,…]   在在在酒吧[0].num_books   73      #根据num_book属性排序。   在在在酒吧=Publisher.objects.annotate (num_books=Count('书')).order_by (-num_books) [5]   在在在酒吧[0].num_books   1323年      

<强>聚合生成生成聚集在QuerySet
  

  

Django有两种方法来生成聚合。第一种方法是为整个QuerySet生成聚合值,例如为全部的书生成价格的平均值:

        在在在从django.db。模型导入Avg   在在在Book.objects.all () .aggregate (Avg(“价格”))   {“price__avg”: 34.35}      

可以简略为:

        在在在Book.objects.aggregate (Avg(“价格”))   {“price__avg”: 34.35}      

函数合计()的参数是一系列聚合函数总体功能:

  

<强> Avg

  

返回平均值

  

<强>数
  

  

<代码>类计数(领域、不同=False)

  

返回计数。当参数不同=True时,返回独特的对象数目。

  

<强> Max

  

返回最大值

  

<强> Min

  

返回最小值。

  

<强> StdDev
  

  

<代码>类StdDev(字段,示例=False)
  

  

返回标准偏差

  

有一个参数样本

  

默认情况下样本=False,返回总体标准偏差,如果示例=True,返回样本标准偏差。

  

<强>和

  

返回总值

  

<强>方差
  

  

<代码>类方差(字段,示例=False)
  

  

返回方差

  

有一个参数样本,默认返回总体方差,样例设为True时返回样本方差。

  

总()方法被调用时,返回一个键值对字典,可以指定关键的名字:

        在在在Book.objects.aggregate (average_price=Avg(“价格”))   {“average_price”: 34.35}      

如果你想生成多个聚合,你只需要添加另一个参数,所以,如果我们还想知道所有书的最高和最低的价格:

        在在在从django.db。模型导入Avg,最大值、最小值   在在在Book.objects.aggregate (Avg(的价格),马克斯(的价格),最小值(“价格”))   {“price__avg”: 34.35,“price__max”:小数(81.20)、“price__min”:小数(12.99)}      

<强>为查询集的每个对象生成聚合值为每个项目生成聚集在QuerySet

Django聚合聚合使用方法解析