聚合查询:
聚合函数必须用在分组之后,没有分组其实默认整体就是一组
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}]>

django基础之day04,聚合查询和分组查询的更多相关文章

  1. {django模型层(二)多表操作}一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询、分组查询、F查询和Q查询

    Django基础五之django模型层(二)多表操作 本节目录 一 创建模型 二 添加表记录 三 基于对象的跨表查询 四 基于双下划线的跨表查询 五 聚合查询.分组查询.F查询和Q查询 六 xxx 七 ...

  2. Django Mysql数据库-聚合查询与分组查询

    一.聚合查询与分组查询(很重要!!!) 聚合查询:aggregate(*args, **kwargs),只对一个组进行聚合 from django.db.models import Avg,Sum,C ...

  3. Django【第7篇】:Django之ORM跨表操作(聚合查询,分组查询,F和Q查询等)

    django之跨表查询及添加记录 一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many); ...

  4. Django框架(十)—— 多表操作:一对一、一对多、多对多的增删改,基于对象/双下划线的跨表查询、聚合查询、分组查询、F查询与Q查询

    目录 多表操作:增删改,基于对象/双下划线的跨表查询.聚合查询.分组查询.F查询与Q查询 一.创建多表模型 二.一对多增删改表记录 1.一对多添加记录 2.一对多删除记录 3.一对多修改记录 三.一对 ...

  5. 6月21日 Django ORM那些相关操作(表关联、聚合查询和分组查询)

    一.ForeignKey操作 正向查找 对象查找(跨表) 语法: 对象.关联字段.字段   示例: book_obj = models.Book.objects.first() # 第一本书对象 pr ...

  6. Web框架之Django_05 模型层了解(单表查询、多表查询、聚合查询、分组查询)

    摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django ORM 常用字段和参数: 常用字段:#AutoFieldint自增列,必须填入参数primary_key = True,当model中 ...

  7. Django基础四之测试环境和ORM查询

    Django基础四之测试环境和ORM查询 目录 Django基础四之测试环境和ORM查询 1. 搭建测试环境 1.1 测试环境搭建方法: 1.2 使用测试环境对数据库进行CURD 1.3 返回Quer ...

  8. Django-model聚合查询与分组查询

    Django-model聚合查询与分组查询 聚合函数包含:SUM AVG MIN MAX COUNT 聚合函数可以单独使用,不一定要和分组配合使用:不过聚合函数一般和group by 搭配使用 agg ...

  9. python全栈开发day68-ORM操作:一般操作、ForeignKey操作、ManyToManyField、聚合查询和分组查询、F查询和Q查询等

    ORM操作 https://www.cnblogs.com/maple-shaw/articles/9403501.html 一.一般操作 1. 必知必会13条 <1> all(): 查询 ...

  10. 聚合查询、分组查询、F&Q查询

    一.聚合查询和分组查询 1.aggregate(*args, **kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典.aggregate()中每个参数都指定一个包含在字典中的返回值 ...

随机推荐

  1. config system setting for elasticsearch

    1. disable swapping. swap 分区会导致garbage collections 花费太多时间,elasticsearch 响应变慢. 方法1:swapoff -a 方法2:vi ...

  2. 01-python中一切皆对象

    python一切皆对象 Python中一切皆对象,在静态语言中,Java也是面向对象编程,Python要比Java的面向对象编程更加彻底.元类编程以及猴子补丁都是用一切皆对象编程出来的. 1.函数和类 ...

  3. day 30 多线程 socketserver模块补充

    内容回顾: socket 模块 服务端:收发数据 - > accept/recv 客户端:收发数据 -> connect/recv 1. 考试题 1. 解释性和编译型 编译型: 先把代码编 ...

  4. sed和awk的简单使用

    sed是一个很好的文件处理工具,本身是一个管道命令,主要是以  行 为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法. 语法: sed [-nefri] ‘ ...

  5. 【决战西二旗】|理解Sort算法

    前言 前面两篇文章介绍了快速排序的基础知识和优化方向,今天来看一下STL中的sort算法的底层实现和代码技巧. 众所周知STL是借助于模板化来支撑数据结构和算法的通用化,通用化对于C++使用者来说已经 ...

  6. 品优购详情页---产品细节模块product_detail

    结构搭建 整个大盒子产品细节模块命名为: product_detail(不给高度,注意清除浮动带来的影响) 1号盒子命名为:aside(左侧浮动,有宽带不给高度) 2号盒子命名为:detail(右侧浮 ...

  7. 【数据结构】之串(C语言描述)

    串(字符串)是编程中最常用的结构,但 C语言 中没有“字符串”这种变量,只能通过字符数组的形式表示字符串. C语言 为我们提供了一个 string.h 的头文件,通过这个头文件,我们可以实现对字符串的 ...

  8. PyTorch官方教程中文版

    首先呈上链接:http://pytorch123.com/ PyTorch是一个基于Torch的Python开源机器学习库,用于自然语言处理等应用程序.它主要由Facebookd的人工智能小组开发,不 ...

  9. Nginx 404 Not Found 解决办法

    环境:宝塔Nginx面板 解决办法: 宝塔面板--站点设置-配置文件. 去掉:   error_page 404 /404.html; 前面的 # 号.

  10. iOS强制横竖屏转换

    https://www.jianshu.com/p/d6cb54d2eaa1  这篇文章给出的方案是可行的. 经测试,想要第一个界面强制横屏,第二个界面强制竖屏, dismiss掉之后回到第一个界面依 ...