一:聚合查询

1.聚合函数作用
聚合查询通常情况下都是配合分组一起使用的
2.聚合函数查询关键字:
aggregate
3.聚合函数
Max		: 最大值
Min : 最小值
Sum : 求合
Count : 计数
Avg : 平均值
4.聚合函数使用
# 聚合函数查询

from app01 import models
from django.db.models import Max,Min,Sum,Count,Avg # 1.所有书的平均价格
res = models.Book.objects.aggregate(Avg('price'))
print(res)

# 2.上述方法一致性使用
res = models.Book.objects.aggregate(Max('price'), Min('price'), Sum('price'), Count('pk'), Avg('price'))
print(res)

二:分组查询

1.分组查询
annotate()为调用的QuerySet中每一个对象都生成一个独立的统计值(统计方法用聚合函数,所有使用前要从django.db.models引入Avg,Max,Count,Sum(首字母大写))。
2.返回值
  • 分组后,用values取值,则返回值是QuerySet书籍类型里面为一个个字典
  • 分组后,用values_list取值,则返回值是QuerySet数据类型里面为一个个元组

MySQL中的limit相当于ORM中的QuerySet数据类型的切片。

3.分组查询关键字
annotate()  里面放聚合函数
  • values 或者 values_list 放在 annotate 前面:values 或者 values_list 是声明以什么字段分组,annotate 执行分组。
  • values 或者 values_list 放在annotate后面: annotate 表示直接以当前表的pk执行分组,values 或者 values_list 表示查询哪些字段, 并且要将 annotate 里的聚合函数起别名,在 values 或者 values_list 里写其别名。
  • filter放在 annotate 前面:表示where条件
  • filter放在annotate后面:表示having
4.分组查询特点
分组之后默认只能获取分组的依据 组内其他字段都无法直接获取

严格模式
ONLY_FULL_GROUP_BY
5总结:

跨表分组查询本质就是将关联表join成一张表,再按单表的思路进行分组查询

三:分组使用

1.统计每一本书的作者个数
from django.db.models import Max, Min, Sum, Count, Avg

# res = models.Book.objects.annotate()
按照书分组 正向查询 按字段 authors__kp 分组省略 __kp 将前面数据拿过来
res = models.Book.objects.annotate(authors_num=Count('authors')).values('title', 'authors_num')
print(res)

models后面点什么 就按什么分组 

author_num 是我们自己定义的字段 用来存储统计出来的每本书对应的作者个数
2.统计每个出版社卖的最便宜的书的价格
出版社查询书 反向 小写       跨表查询
res = models.Publish.objects.annotate(min_price=Min('book__price')).values('name', 'min_price')
print(res)

3.统计不止一个作者的图书
1.先按照图书分组
2.过滤出不止一个作者的图书 # 按书籍分组 正向 字段 每一本书对应的作者个数 筛选出每一本书作者个数大于1的
res = models.Book.objects.annotate(author_num=Count('authors')).filter(author_num__gt=1).values('title','author_num','authors__name')
print(res)

4.查询每个作者出的书的总价格
res = models.Author.objects.annotate(sum_price=Sum('book__price')).values('name', 'sum_price')
print(res)

Django聚合函数与分组查询的更多相关文章

  1. $Django 聚合函数、分组查询、F,Q查询、orm字段以及参数

        一.聚合函数    from django.db.models import Avg,Sum,Max,Min,Count,F,Q   #导入    # .查询图书的总价,平均价,最大价,最小价 ...

  2. ORM中聚合函数、分组查询、Django开启事务、ORM中常用字段及参数、数据库查询优化

    聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的 ...

  3. hibernate学习系列-----(5)hibernate基本查询下篇:hibernate聚合函数、分组查询及命名查询

    在上一篇中,大致学习了hibernate的基本查询:HQL基本查询,今天,继续昨天的步伐,继续学习hibernate的基本查询..... 1.hql聚合函数,先大致列一下hql的聚合函数有哪些吧: 在 ...

  4. MySQL数据操作与查询笔记 • 【第6章 聚合函数和分组查询】

    全部章节   >>>> 本章目录 6.1 sum.max 和 min 聚合函数 6.1.1 聚合函数介绍 6.1.2 sum 函数 6.1.3 max/min 函数 6.2 a ...

  5. Django ORM 多对多操作 使用聚合函数和分组 F查询与Q查询

    创建表 # models.py form django.db import models class Book(models.Model): # 表名book,django会自动使用项目名+我们定义的 ...

  6. SQL Server 基础 04 函数与分组查询数据

    函数与分组查询数据 系统函数分 聚合函数.数据类型转换函数.日期函数.数学函数 . . . 1. 聚合函数 主要是对一组值进行计算,然后返回一个值. 聚合函数包括 sum(求和).avg(求平均值). ...

  7. Django的mode的分组查询和聚合查询和F查询和Q查询

    1.聚合查询 # 聚合函数aggregate,求指定字段的最大值,最小值,平均值,和的值,方法如下 from django.db.models import Avg from django.db.mo ...

  8. orm中的聚合函数,分组,F/Q查询,字段类,事务

    目录 一.聚合函数 1. 基础语法 2. Max Min Sum Avg Count用法 (1) Max()/Min() (2)Avg() (3)Count() (4)聚合函数联用 二.分组查询 1. ...

  9. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计 ...

  10. SQL语句汇总(三)——聚合函数、分组、子查询及组合查询

    拖了一个星期,终于开始写第三篇了.走起! 聚合函数: SQL中提供的聚合函数可以用来统计.求和.求最值等等. 分类: –COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均 ...

随机推荐

  1. JS 模块化- 05 ES Module & 4 大规范总结

    1 ES Module 规范 ES Module 是目前使用较多的模块化规范,在 Vue.React 中大量使用,大家应该非常熟悉.TypeScript 中的模块化与 ES 类似. 1.1 导出模块 ...

  2. 基于Qt Designer和PyQt5的桌面软件开发--环境搭建和入门例子

      本文介绍了如何使用技术栈PyCharm+Qt Designer+PyQt5来开发桌面软件,从环境搭建.例子演示到对容易混淆概念的解释.文中用到的全部软件+代码下载链接为:https://url39 ...

  3. NSIS 自定义安装界面准确获取安装进度完美解决方案

    友情提醒:随着7zip版本快速更新,nsis7z插件已经不能全面兼容新版,使用本例子请将7zip版本降至9.2x以下并下载最新版nsis7z.dll! ------------------------ ...

  4. day04-MySQL常用函数01

    5.MySQL常用函数 5.1合计/统计函数 5.1.1合计函数-count count 返回行的总数 Select count(*)|count (列名) from table_name [WHER ...

  5. 220726 T2 Multisets (思维)

    题目描述 我们说一个可重集 AA 比可重集 BB 小,当且仅当对于两个可重集中出现次数不同的最小元素 xx ,元素 xx 在 AA 中出现次数更多. 例如,可重集 {1,2,3}1,2,3 就比可重集 ...

  6. 洛谷P2827 [NOIP2016 提高组] 蚯蚓 (二叉堆/队列)

    容易想到的是用二叉堆来解决,切断一条蚯蚓,其他的都要加上一个值,不妨用一个表示偏移量的delta. 1.取出最大的x,x+=delta: 2.算出切断后的两个新长度,都减去delta和q: 3.del ...

  7. .NET周报【10月第2期 2022-10-17】

    主题 宣布 .NET 7 发布候选版本 2 - .NET Blog https://devblogs.microsoft.com/dotnet/announcing-dotnet-7-rc-2/ .N ...

  8. HNOI2008GT考试

    题目链接 考虑dp,f(i,j)表示做到了第i位(共n位),当前的后缀串与A1~Aj相匹配 接下来的方案数.转移的话枚举一个k=0~9表示这位选什么,如果选了以后,匹配的位置会改变到 j' ,j'可以 ...

  9. 齐博x1换服务器如何转移网站?

    如果你要把网站从本机传到服务器,又或者要更换服务器,请按下面的操作处理 第一步,必须要在原网站后台备份数据. 第二步,把备份好的网站所有文件,传到新服务器或空间 特别要注意 \cache\ 目录下建议 ...

  10. (二)Three光线检测-实现摄像机向鼠标点击位置滑动动画

    (二)Three.js光线检测 摘要:使用three.js中的光线检测 Raycaster() ,实现一下效果: 通过点击处的坐标,修改摄像机位置,实现摄像机由远及近的过渡动态效果(由远景到近景) 1 ...