聚合查询
聚合查询是对查询结果集进行某种特定的操作或者计算出某个值,例如对结果集求和、平均值、最大值、最小值等操作。在 Django 中,聚合查询的方法是使用 aggregate() 函数。
(1) 获得所有人的平均年龄
from django.db.models import Avg
from yourapp.models import Person
result = Person.objects.aggregate(avg_age=Avg('age'))
print(result['avg_age'])
(2) 查询男性和女性的人数及平均年龄
from django.db.models import Count, Avg
from yourapp.models import Person
result = Person.objects.values('gender').annotate(num_person=Count('id'), avg_age=Avg('age'))
for r in result:
print(r['gender'], r['num_person'], r['avg_age'])
分组查询
分组查询是将查询结果按照某几列进行分组,并计算分组内的统计值,例如对某一列进行统计数值,并将结果按照指定列分组显示。在 Django 中,分组查询的方法是使用 values() 函数和 annotate() 函数。
(1) 查询男性和女性的人数
from django.db.models import Count
from yourapp.models import Person
result = Person.objects.values('gender').annotate(num_person=Count('id'))
for r in result:
print(r['gender'], r['num_person'])
(2) 查询每个部门的人数
from django.db.models import Count
from yourapp.models import Person
result = Person.objects.values('department').annotate(num_person=Count('id'))
for r in result:
print(r['department'], r['num_person'])
(3) 查询每个部门的平均年龄
from django.db.models import Avg
from yourapp.models import Person
result = Person.objects.values('department').annotate(avg_age=Avg('age'))
for r in result:
print(r['department'], r['avg_age'])
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Django聚合查询和分组查询 - Python技术站