上一章:django ORM框架 第三章 关联表的数据创建与查询_做测试的喵酱的博客-CSDN博客
一、聚合函数类型:
from django.db.models import Q, Count, Avg, Max, Min
班级表:
学生信息表:
1.1 Count
模版:
QuerySet.aggregate(聚合函数("字段名"))
返回结果为一个字典
举例: name中包含“红” 的学生数量
x = Student.objects.filter(name__contains="红").aggregate(Count("id"))
print(x)
x 的值为一个字典,{'id__count': 3}
注意:
1、计算结果为一个字典,key 是字段名__聚合函数名小写,如'id__count'
2、可以通过关键字参数形式,自定义返回字典中key。
如我要把key 改成 test , {'test': 3}。 test=Count("id")
x = Student.objects.filter(name__contains="红").aggregate(test=Count("id"))
1.2 分组查询
格式:
父表名.objects.values('父表主键id').annotate(Count('从表模型类名小写名称'))
举例:
统计每个班级的学生数量。
y = Class.objects.values('class_id').annotate(Count('student'))
print(y)
y的值为 QuerySet ,但是QuerySet 中每一个元素,是一个字典。
<QuerySet [{'class_id': 1, 'student__count': 3}, {'class_id': 2, 'student__count': 2}, {'class_id': 3, 'student__count': 3}, {'class_id': 4, 'student__count': 5}]>
注意:
1、想要自定义 字典中的key,将 'student__count': 3 中的key 改成自定义的key如 miao:3
需要使用关键字方式 annotate(miao=Count('student'))
y = Class.objects.values('class_id').annotate(miao=Count('student'))
print(y)
y的值为:
<QuerySet [{'class_id': 1, 'miao': 3}, {'class_id': 2, 'miao': 2}, {'class_id': 3, 'miao': 3}, {'class_id': 4, 'miao': 5}]>
1.2 Avg Max Min
与Count使用方法一致