Django自带的ORM如何执行group by聚合查询语句(求和、累积、平均)

使用Django的ORM建立了如下Model:

class Book(models.Model):
    # 书籍名字
    name = models.CharField(max_length=300)
    # 书籍页数
    pages = models.IntegerField()
    # 书籍价格
    price = models.DecimalField(max_digits=10, decimal_places=2)
    # 书籍作则
    authors = models.CharField(max_length=300)
    publisher = models.CharField(max_length300)
    # 发布日期
    pub_date = models.DateField()

现在想查询以字段authors分组,查出每个作者所著所有书的总页书,用sql语句可以很容易的完成此任务:

SELECT *, SUM(pages) AS total_pages
FROM Book
GROUP BY authors;

那么如何用Django自带的ORM接口实现呢?

方法如下:

from django.db.models import Sum

result = Book.objects.values("authors").annotate(total_pages=Sum("pages")).all()

计算每个作者一共写了多少本书籍代码示例:


from django.db.models import Count

result = Book.objects.values("authors").annotate(total=Count("name ")).all()

计算书籍的平均价格代码示例:

from django.db.models import Avg

result = Book.objects.values("authors").annotate(price=Avg("price ")).all()

参考文献:

http://python.usyiyi.cn/documents/django_182/topics/db/aggregation.html

相关文章

功能概要:(目前已实现功能)公共展示部分:1.网站首页展示...
大体上把Python中的数据类型分为如下几类: Number(数字) ...
开发之前第一步,就是构造整个的项目结构。这就好比作一幅画...
源码编译方式安装Apache首先下载Apache源码压缩包,地址为ht...
前面说完了此项目的创建及数据模型设计的过程。如果未看过,...
python中常用的写爬虫的库有urllib2、requests,对于大多数比...