原文链接:Django笔记十六之aggregate聚合操作
常用的聚合操作比如有平均数,总数,最大值,最小值等等
用到的 model 如下
class Author(models.Model:
name = models.CharField(max_length=100
age = models.IntegerField(
class Publisher(models.Model:
name = models.CharField(max_length=300
class Book(models.Model:
name = models.CharField(max_length=300
pages = models.IntegerField(
price = models.DecimalField(max_digits=10, decimal_places=2
rating = models.FloatField(
authors = models.ManyToManyField(Author
publisher = models.ForeignKey(Publisher, on_delete=models.CASCADE
pubdate = models.DateField(
class Store(models.Model:
name = models.CharField(max_length=300
books = models.ManyToManyField(Book
聚合函数
- Avg —— 平均数
- Count —— 总数
- Max —— 最大值
- Min —— 最小值
- Sum —— 总数
以下介绍一下几种聚合操作的例子,因为 Avg,Max,Min 都是一样的操作方法,所以用一个函数来做示例。
获取表中最大值:
from django.db.models import Max, Min, Avg
Book.objects.all(.aggregate(Avg('price'
对应的 SQL 为:
select avg(price from blog_book;
返回的值为:
{'price__avg': Decimal('5.500000'}
指定聚合类型返回
Book.objects.all(.aggregate(Avg('price', output_field=models.FloatField(
返回的结果就是:
{'price__avg': 5.5}
指定聚合字段名称
Book.objects.aggregate(avg_price=Avg("price"
以上用的示例都是 Avg 平均数,更换成 最大值 Max,最小值 Min 都是可以的
多个聚合操作
from django.db.models import Avg, Max, Min
Book.objects.aggregate(avg_price=Avg("price", max_price=Max("price", min_price=Min("price"
关联表的聚合操作
Store.objects.aggregate(min_price=Min("books__price"
如果有多个表链式关联,也可以直接链式聚合获取:
Store.objects.aggregate(youngest_age=Min("books__authors__age"
以上就是本篇笔记的全部内容,其实还有一些聚合的操作,是关于 annotate 的一些用法示例,这里不多赘述,有时间可以单独开一个专门的笔记。
如果想获取更多相关文章,可扫码关注阅读: