聚合查询: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)
结果: