Django_聚合与分组查询

聚合查询:aggregate(),返回值为一个字典。

# 导入功能函数
from django.db.models import Avg, Max, Min, Count
# 查询全部书籍的平均价格,最大价格,最小价格,价格总和,可以自定义字典的键:aggregate(wdc=Avg("price"))
ret = models.Book.objects.all().aggregate(Avg("price"), Max("price"), Min("price"), Count("price"))
print(ret)

结果:

 

 分组查询:annotate(),返回值是一个对象。

  单表:

from django.db.models import Avg, Max, Min, Count
# 查询每个部门的平均薪水  values("要分组的字段").annotate(要统计的字段)
ret = models.Wdc.objects.values("dep").annotate(Avg("salary"))
print(ret)

结果:

   多表:

# 查询每一个出版社的名称以及出版的书籍个数
from django.db.models import Avg, Max, Min, Count
# 方式一:annotate(Count(表名__要查询的字段))
ret = models.Publish.objects.values("name").annotate(c=Count("book__title"))
print(ret)
# 方式二:以主键分组,最后取出版社的名称和出版社书籍的个数。
ret = models.Publish.objects.values("nid").annotate(c=Count("book__title")).values("name", "c")
print(ret)

结果:

from django.db.models import Avg, Max, Min, Count
# 查询每一个作者的出版的最贵的书籍价格以及作者名字。("pk")代表主键。
ret = models.Author.objects.values("pk").annotate(c=Max("book__price")).values("name", "c")
print(ret)

结果:

 

posted @ 2020-04-21 00:55  手可摘星辰。  阅读(674)  评论(0编辑  收藏  举报