django基础之day04,聚合查询和分组查询
2024-09-01 21:41:52
聚合查询:
聚合函数必须用在分组之后,没有分组其实默认整体就是一组
Max Min Sum Avg Count
1.分组的关键字是:aggretate
2.导入模块
from django.db.models import Max Min Sum Avg Count
温馨提示:只要跟数据库相关的功能,基本上都在django.db.models里面
如果不在,可能直接在django.db里面
1.筛选出价格最高的书籍
#聚合函数
from django.db.models import Max,Min,Sum,Count,Avg
#注意事项,聚合函数Max,Min,Sum,Count,Avg的首字母要大写,不然会报错
#1.筛选出价格最高的书籍
# res=models.Books.objects.aggregate(mr=Max('price'))
# print(res)
#结果:{'mr': Decimal('888.00')}
#2.求书籍总价格
# res=models.Books.objects.aggregate(sm=Sum('price'))
# print(res)
#结果:{'sm': Decimal('2442.00')}
# 3.求书籍的平均价格
# res=models.Books.objects.aggregate(av=Avg('price'))
# print(res)
#结果:{'av': 610.5}
#4.一起使用
# res=models.Books.objects.aggregate(Max('price'),Sum('price'),Count('price'),Avg('price'))
# print(res)
#结果:{'price__max': Decimal('888.00'), 'price__sum': Decimal('2442.00'), 'price__count': 4, 'price__avg': 610.5}
分组查询:
什么时候需要分组
1.统计每一个部门的平均薪资
2.统计每一个部门的男女比例
1.关键字:annotate
2.导入模块
from django.db.models import Max Min Sum Avg Count
django中models后面点什么,就按照什么分组
#1.统计每一本书的作者个数,书名,和对应的作者人数
# res=models.Book.objects.annotate(author_num=Count('authors__id')).values('title','author_num')
# print(res)
#结果:<QuerySet [{'title': '三国演义', 'author_num': 0}, {'title': '红楼梦', 'author_num': 2}, {'title': '水浒传', 'author_num': 0}, {'title': '西游记', 'author_num': 2}]>
#2.统计每个出版社卖的最便宜的书的价格,出版社的名字,出版的最便宜的书
# res=models.Publish.objects.annotate(min_price=Min('book__price')).values('name','min_price')
# print(res)
#结果:<QuerySet [{'name': '东方出版社', 'min_price': Decimal('222.33')}, {'name': '北方出版社', 'min_price': Decimal('333.00')}]>
#3.统计不止一个作者的图书
#分析步骤:
#1.先拿书和对应的作者数
#2.再筛选出作者数量大于1的图书,书名和作者数目
# res=models.Book.objects.annotate(author_num=Count('authors')).filter(author_num__gt=1).values('title','author_num')
# print(res)
#结果:<QuerySet [{'title': '红楼梦', 'author_num': 2}, {'title': '西游记', 'author_num': 2}]>
#4.查询各个作者出的书的总价格,作者名字,总价格
# res=models.Author.objects.annotate(sum_price=Sum('book__price')).values('name','sum_price')
# print(res)
#结果:<QuerySet [{'name': 'jason', 'sum_price': Decimal('777.33')}, {'name': 'oscar', 'sum_price': Decimal('444.33')}, {'name': 'egon', 'sum_price': Decimal('333.00')}, {'name': 'dundun', 'sum_price': None}]>
最新文章
- 1、软件工程师要阅读的书籍 - IT软件人员书籍系列文章
- 在内网中OWA第一次访问速度慢的问题
- 退役?OR 继续
- MyEclipse从数据库反向生成实体类之Hibernate方式 反向工程
- 【CodeForces 611C】New Year and Domino
- Caught exception while loading file struts-default.xml 错误
- iOS,object-c传参c语言的二维数组
- 完美PNG半透明窗体解决方案
- struts2一个和多个文件上传及下载
- Iframe简单介绍(一)
- 通过数据绑定控制WPF动画启动,WPF动画开始
- WIN2008虚拟机安装ORACLE11g记录
- window.history.back(-1);与window.go(-1);的区别
- 记录日常Linux常用软件
- 1.为什么使用spring boot
- Announcing the Updated NGINX and NGINX Plus Plug‑In for New Relic (Version 2)
- 第三十五节,目标检测之YOLO算法详解
- ceph常用运维技巧总结1
- Python3基础 os.path.getsize 获得文件的大小
- Python 转义符
热门文章
- Ubuntu 16.04源码编译boost库 编写CMakeLists.txt | compile boost 1.66.0 from source on ubuntu 16.04
- Python 命令行之旅:深入 click 之子命令篇
- VLAN配置及Trunk接口配置
- Spring Boot2 系列教程(二十七)Nginx 极简扫盲入门
- Sql server中用现有表中的数据创建Sql的Insert插入语句
- 使用selenium模拟登陆新浪微博
- [ASP.NET Core 3框架揭秘] 配置[1]:读取配置数据[上篇]
- 程序员的算法课(18)-常用的图算法:广度优先(BFS)
- Xtrabackup 增量备份 和 增量还原
- Netty学习——Thrift的入门使用