Django ORM查询之聚合函数、聚合查询(aggregate)、分组查询(annotate)
在Django ORM中,我们可以使用聚合查询(aggregate)和分组查询(annotate)来进行复杂的数据操作。
聚合查询(aggregate)是指对一组数据进行统计计算,如求和(Sum)、平均值(Avg)、最大值(Max)、最小值(Min)等。
分组查询(annotate)则是指将查询结果按照某个字段进行分组,并可以应用聚合函数。
以下是使用Django ORM进行聚合查询和分组查询的示例代码:
from django.db.models import Avg, Sum, Max, Min
from myapp.models import MyModel
# 聚合查询
result = MyModel.objects.aggregate(
average_price=Avg('price'),
total_sales=Sum('quantity'),
highest_price=Max('price'),
lowest_price=Min('price')
)
# 分组查询
from django.db.models import Count
grouped_result = MyModel.objects.annotate(
num_items=Count('item')
)
# 分组后应用聚合函数
grouped_annotated = MyModel.objects.annotate(
total_price=Sum('price'),
average_quantity=Avg('quantity')
)
在这个例子中,我们首先定义了一个模型MyModel
,然后使用aggregate
方法计算了平均价格、总销量、最高价格和最低价格。接着,我们使用annotate
方法按某个字段进行分组,并计算了每个分组的数量。最后,我们在分组基础上进行了聚合查询,计算了每个分组的总价格和平均数量。
评论已关闭