Django ORM 聚合查询和分组查询

简介: 对QuerySet计算统计值,需要使用aggregate方法,提供的参数可以是一个或多个聚合函数Django提供了一系列的聚合函数,其中Avg(平均值)、Count(计数)、Max(最大值)、Min(最小值)、Sum(加和)最为常用要使用这些聚合函数,需要将它们引入当前的环境中:


1.聚合查询


对QuerySet计算统计值,需要使用aggregate方法,提供的参数可以是一个或多个聚合函数

Django提供了一系列的聚合函数,其中Avg(平均值)、Count(计数)、Max(最大值)、Min(最小值)、Sum(加和)最为常用

要使用这些聚合函数,需要将它们引入当前的环境中:


from django.db.models import Avg, Count, Min, Max, Sum


首先得到id为1的Topic的Comment对象,之后,计算up值的加和。可以看到,字典结果的键名称是up__sum,这是Django根据字段名和聚合函数的名称自动拼接得到的:


comment = Comment.objects.filter(topic=1).aggregate(Sum('up'))
return HttpResponse("Hello World!" + str(comment['up__sum']))


也可以给aggregate传递多个聚合函数:


comment = Comment.objects.filter(topic=1).aggregate(Sum('up'), Max('up'))
return HttpResponse("Hello World!" + str(comment['up__sum'])
                    + '---' + str(comment['up__max']))


2.分组查询


第二类统计是对QuerySet中的每一个Model对象都生成一个统计值,这可以通过annotate方法完成


annotate方法的使用过程与aggregate是类似的,都需要传递聚合函数,来描述统计过程


统计每一个Topic对应的Comment的数量,利用annotate可以这样实现:


topic = Topic.objects.annotate(Count('comment'))


如果想得到每一个Topic的所有Comment的up加和:


comment = Comment.objects.values('topic_id').annotate(Sum('up')).order_by()
return HttpResponse("Hello World!" + str(comment[0]['up__sum']))


需要注意,annotatevalues方法的顺序非常重要,会影响实际的查询效果:


valuesannotate的前面,Django会按照values中指定的字段对Model对象进行分组,再对每个分组计算统计值,可以参照上述查询


目录
相关文章
|
6月前
|
SQL 关系型数据库 MySQL
Django入门ORM(Django操作MySQL) 专题一
Django入门ORM(Django操作MySQL) 专题一
|
7月前
|
存储 数据可视化 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移3
Django创建应用、ORM的进阶使用及模型类数据库迁移3
52 0
|
7月前
|
关系型数据库 MySQL 数据库
Django创建应用、ORM的进阶使用及模型类数据库迁移2
Django创建应用、ORM的进阶使用及模型类数据库迁移2
48 0
|
4月前
|
SQL 数据库 开发者
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
Python Web 开发: 什么是 Django ORM?如何使用它进行数据库操作?
|
1月前
|
SQL API 数据库
一篇文章带你了解Django ORM操作
一篇文章带你了解Django ORM操作
20 0
|
5月前
|
SQL 缓存 数据库
10 Django模型 - 模型查询
10 Django模型 - 模型查询
41 0
|
5月前
|
SQL 关系型数据库 MySQL
07 Django模型 - ORM简介及MySQL数据库的使用
07 Django模型 - ORM简介及MySQL数据库的使用
36 0
|
4月前
|
Python
django orm 批量更新不同内容
网上存在很多相似文章,都是使用drf-extension,但是这个包其实只是批量更新的一种方法,就是全部更新一个内容,这完全不符合自己的需求。
25 1
|
7月前
|
SQL 存储 API
Django ORM详解:最全面的数据库处理指南
Django ORM详解:最全面的数据库处理指南
46 0
|
7月前
|
缓存 数据库 Python
django这些查询技巧你会了吗?
django这些查询技巧你会了吗?