Django之ORM聚合查询、分组查询
2021/5/1 10:28:35
本文主要是介绍Django之ORM聚合查询、分组查询,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
ORM聚合查询
聚合查询
五个聚合函数的时候,max min avg count sum,要先导入,一般配合分组一起使用
from django.db.models import Min,Max,Count,Sum,Avg 1.所有书的平均价格 单单想使用聚合函数,但不想分组,mysql不可以,但orm中可以,不过要用到aggregate res = models.Book.objects.aggregate(Ang("price")) 一次性全拿
res = models.Book.objects.aggregate(Ang("price"),Min(“price”),Max(“price”),Count(“price”),Sum(“price”))
单独使用聚合的很少,都是配合分组一起使用。
ORM分组查询
annotate=mysql中的group by
mysql中默认是严格模式,ONLY_FULL_GROUP_BY
分组之后默认只能获取到分组的依据,
组内的其他字段都无法直接获取了。
到了orm中,分组查询
1.统计每本书的作者个数(按书分组) # res =models.Book.objects.annotate() models后面点什么,就按什么分组。
res =models.Book.objects.annotate(author_num = Count("authors_ _id")).values("title","author_num") 这里又涉及到跨表,Count中authors跨表,_ _然后表示字段
author_num是自定义字段,用来存储统计出来的每本书对应的作者个数。
authors__id可以不加__id,orm自动按主键统计。
2.统计每个出版社卖的最便宜的书价,反向 res=models.Publish.objects.annotate(min_price=Min("book__price")).values("name","min_price")
3.统计不止一个作者的图书 res=models.Book.obejcts.annotate(author_num=Count("authors")).filter(author_num__gt=1).values("title","author_num") 只要orm语句得出的结果还是一个queryset对象,就可以继续无限的点queryset对象封装的方法
4.查询每个作者出版的书的总价格 res = models.Auhtors.objects.annote(total_price=Sum("book__price")).values("namec ","total_price") 如果想按照指定的字段分组呢? models.Book.objects.values("price").annotate()
如果分组报错了,那么要修改数据库的严格模式,说明分组后只能拿分组字段,其他字段不能拿。
这篇关于Django之ORM聚合查询、分组查询的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-09-05MongoDB入门:快速掌握NoSQL数据库基础
- 2024-08-28go 项目中怎么打印调试-icode9专业技术文章分享
- 2024-08-21swoole未来的发展前景与golang对比哪个更好-icode9专业技术文章分享
- 2024-08-16goland 已经下了中文插件了, 怎么设置成中文-icode9专业技术文章分享
- 2024-07-26使用 SendGrid 的 Go 客户端库能同时给多个邮箱发吗-icode9专业技术文章分享
- 2024-07-26使用 SendGrid 的 Go 客户端库时怎么设置header 和 标签tag 呢-icode9专业技术文章分享
- 2024-07-26SendGrid 对邮件的类别(Categories)和标签的数量有限制吗?-icode9专业技术文章分享
- 2024-07-17课程推荐《高性能GO企业级APM监控系统实战》
- 2024-06-26解决google chrome helper 内存占用较高!
- 2024-04-01got an unexpected keyword argument