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对象进行分组,再对每个分组计算统计值,可以参照上述查询


目录
相关文章
|
1月前
|
SQL Go 数据库
【速存】深入理解Django ORM:编写高效的数据库查询
【速存】深入理解Django ORM:编写高效的数据库查询
57 0
|
1月前
|
SQL 前端开发 Python
基于python-django的neo4j人民的名义关系图谱查询系统
基于python-django的neo4j人民的名义关系图谱查询系统
29 0
|
3月前
|
数据管理 数据挖掘 调度
Django后端架构开发:URLconf到ORM深度剖析
Django后端架构开发:URLconf到ORM深度剖析
55 1
|
3月前
|
数据库 Python
Django ORM
【8月更文挑战第23天】
42 4
|
3月前
|
API 数据库 开发者
【独家揭秘】Django ORM高手秘籍:如何玩转数据模型与数据库交互的艺术?
【8月更文挑战第31天】本文通过具体示例详细介绍了Django ORM的使用方法,包括数据模型设计与数据库操作的最佳实践。从创建应用和定义模型开始,逐步演示了查询、创建、更新和删除数据的全过程,并展示了关联查询与过滤的技巧,帮助开发者更高效地利用Django ORM构建和维护Web应用。通过这些基础概念和实践技巧,读者可以更好地掌握Django ORM,提升开发效率。
39 0
|
3月前
|
SQL Go 数据库
Django入门到放弃之ORM多表操作
Django入门到放弃之ORM多表操作
|
3月前
|
SQL 关系型数据库 MySQL
Django入门到放弃之ORM单表操作
Django入门到放弃之ORM单表操作
|
4月前
|
SQL 数据库 Python
Django框架数据库ORM查询操作(6)
【7月更文挑战第6天】```markdown Django ORM常用数据库操作:1) 查询所有数据2) 根据ID查询 3) 精确查询 4) 分页排序
70 1
|
SQL 缓存 API
django 1.8 官方文档翻译: 2-2-1 执行查询
执行查询 一旦你建立好数据模型之后,django会自动生成一套数据库抽象的API,可以让你执行增删改查的操作。这篇文档阐述了如何使用这些API。
848 0
|
13天前
|
设计模式 前端开发 数据库
Python Web开发:Django框架下的全栈开发实战
【10月更文挑战第27天】本文介绍了Django框架在Python Web开发中的应用,涵盖了Django与Flask等框架的比较、项目结构、模型、视图、模板和URL配置等内容,并展示了实际代码示例,帮助读者快速掌握Django全栈开发的核心技术。
96 44