Django聚合-连接(Joins)和聚合
在Django中,我们可以使用aggregate()
函数来对数据库中的数据进行聚合操作,如计数(count)、求和(sum)、平均值(avg)等。同时,我们也可以使用annotate()
函数来连接表并进行聚合操作。
以下是一些使用annotate()
进行连接和聚合操作的示例:
- 使用
annotate()
进行连接并计数:
from django.db.models import Count
from myapp.models import Blog, Entry
blog_entries = Blog.objects.annotate(entry_count=Count('entry__headline'))
for blog in blog_entries:
print(blog.entry_count)
在这个例子中,我们使用annotate()
函数连接了Blog和Entry模型,并计算了每个Blog有多少个Entry。
- 使用
annotate()
进行连接并求和:
from django.db.models import Sum
from myapp.models import Order, OrderItem
order_totals = Order.objects.annotate(total=Sum('orderitem__price'))
for order in order_totals:
print(order.total)
在这个例子中,我们使用annotate()
函数连接了Order和OrderItem模型,并计算了每个Order的总价。
- 使用
annotate()
进行连接并求平均值:
from django.db.models import Avg
from myapp.models import Store, Sale
store_average_sales = Store.objects.annotate(average_sale=Avg('sale__price'))
for store in store_average_sales:
print(store.average_sale)
在这个例子中,我们使用annotate()
函数连接了Store和Sale模型,并计算了每个Store的平均销售额。
注意:annotate()
函数返回的查询集中会包含原始模型的额外字段,这个字段是用来存储聚合结果的。在上述例子中,entry_count
、total
和average_sale
就是这样的额外字段。
评论已关闭