聚合查询:
聚合函数必须用在分组之后,没有分组其实默认整体就是一组
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. Linux系统中文件行末尾出现^M的原因及解决办法

    不同系统,有不同的换行符号: 在windows下的文本文件的每一行结尾,都有一个回车('\n')和换行('\r') 在linux下的文本文件的每一行结尾,只有一个回车('\n'); 在Mac下的文本文 ...

  2. 高德JS依赖分析工程及关键原理

    一.背景 高德 App 进行 Bundle 化后,由于业务的复杂性,Bundle 的数量非常多.而这带来了一个新的问题——Bundle 之间的依赖关系错综复杂,需要进行管控,使 Bundle 之间的依 ...

  3. linux ftp配置及实操

    一.基础知识: 1.ftp:file transfer protocal 及文件传输协,工作与应用层. 2.ftp协议的实现: 服务器端实现软件:vsftpd,pureftpd,filezilla s ...

  4. 前端API层架构,也许你做得还不够

    上午好,今天为大家分享下个人对于前端API层架构的一点经验和看法.架构设计是一条永远走不完的路,没有最好,只有更好.这个道理适用于软件设计的各个场景,前端API层的设计也不例外,如果您觉得在调用接口时 ...

  5. Airtest介绍与脚本入门

    前言 通过阅读本小节教程,你将了解以下内容: 一个Airtest脚本例子的详细解析 如何在Python脚本中调用Airtest接口 图片语句的参数介绍 Airtest介绍 Airtest是一款基于Py ...

  6. Java快速教程步伐

    Java基础在Java基础系列文章中,我将说明Java的基础内容,特别是面向对象的相关概念. Java基础01 从HelloWorld到面向对象 Java基础02 方法与数据成员 Java基础03 构 ...

  7. P1055 ISBN号码

    题目描述 每一本正式出版的图书都有一个ISBN号码与之对应,ISBN码包括99位数字.11位识别码和33位分隔符,其规定格式如x-xxx-xxxxx-x,其中符号-就是分隔符(键盘上的减号),最后一位 ...

  8. Python常用转义字符

    \   在行尾时是     续行符 \\   反斜杠符号 \' 单引号 \"  双引号 \a  响铃 \b  退格 \e  转义 \000  空 \n     换行 \v 纵向制表符 \t  ...

  9. python 计算两个日期间的小时数

    #!/usr/bin/env python #encoding: utf-8 import datetime def dateDiffInHours(t1, t2): td = t2 - t1 ret ...

  10. MySQL必知必会(创建计算字段(field))

    #字段(field)基本上和列(column)的意思相同 SELECT Concat(vend_name, ' (', vend_country, ')') FROM vendors ORDER BY ...