Django笔记十六之aggregate聚合操作

科技资讯 投稿 12200 0 评论

Django笔记十六之aggregate聚合操作

原文链接: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 的一些用法示例,这里不多赘述,有时间可以单独开一个专门的笔记。

如果想获取更多相关文章,可扫码关注阅读:

编程笔记 » Django笔记十六之aggregate聚合操作

赞同 (66) or 分享 (0)
游客 发表我的评论   换个身份
取消评论

表情
(0)个小伙伴在吐槽