Django(part27)--聚合查询(django 分组聚合)

网友投稿 293 2022-08-31


Django(part27)--聚合查询(django 分组聚合)

学习笔记,仅供参考

文章目录

​​数据库的操作(CRUD操作)​​

​​聚合查询​​

​​不分组聚合​​​​分组聚合​​

数据库的操作(CRUD操作)

聚合查询

聚合查询是指对某个数据表中的某个字段的数据计算其统计量,比如,求出bookstore_book数据表中书的平均价格,查询所有书的总个数等等等。

不分组聚合

不带分组的聚合查询是指导将全部数据进行集中统计查询。

用法

from django.db.models import *Entry.objects.aggregate(结果变量名=聚合函数('列'))#聚合函数#Sum, Avg, Count, Max, Min

返回结果

由结果变量名和值组成的字典,格式为:

{"结果变量名": 值}

举个例子

我们先看一下bookstore_author数据表:

mysql> select * from bookstore_author;+----+--------+-----+----------------------+| id | name | age | email |+----+--------+-----+----------------------+| 1 | 山羊 | 19 | goatbishop@gamil.com || 2 | 小黄 | 10 | 1033794241@qq.com || 5 | 小黑 | 12 | xiaohei@gmail.com || 6 | 小白 | 18 | xiaobai@gmail.com || 7 | 山羊哥 | 27 | biggoat@gmail.com |+----+--------+-----+----------------------+5 rows in set (0.00 sec)

在Django shell中敲入如下命令:

from bookstore import modelsfrom django.db.models import *result = models.Author.objects.aggregate(myAvg=Avg('age'))print("平均年龄是:", result['myAvg'])print("result=", result)

得到结果:

平均年龄是: 17.2result= {'myAvg': 17.2}

分组聚合

分组聚合是指计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即查询集的每一项生成聚合。

分组聚合的步骤:

首先,通过先用查询结果​​Entry.object.values('列1', '列2')​​ 查找到要分组聚合的列再通过返回结果的​​QuerySet.annotate(结果变量名=聚合函数('列'))​​ 的方法分组聚合得到分组结果

举个例子

我们在Django shell中敲入如下代码:

from django.db.models import Countfrom . import models#得到所有出版社的查询集合QuerySetpub_set = models.Book.objects.values('pub')#根据出版社查询分组,出版社和Count的分组聚合查询集合pub_count_set = pub_set.annotate(myCount=Count('pub'))#返回查询集合for item in pub_count_set: print("出版社:", item['pub'], "图书有:", item['myCount'])

输出结果:

出版社: 清华大学出版社 图书有: 2出版社: 机械工业出版社 图书有: 1出版社: 人民邮电出版社 图书有: 2出版社: 黑山羊出版社 图书有: 1


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Django(part28)--F对象(django to_field)
下一篇:mybatis TypeHandler注入spring的依赖方式
相关文章

 发表评论

暂时没有评论,来抢沙发吧~