一、聚合查询与分组查询(很重要!!!)

聚合查询:aggregate(*args, **kwargs),只对一个组进行聚合

from django.db.models import Avg,Sum,Count,Max,Min
# 1、查询所有图书的平均价格
print(models.Book.objects.all().aggregate(Avg("price")))

aggregate()QuerySet 的一个终止子句(也就是返回的不再是一个QuerySet集合的时候),意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合值指定一个名称,可以向聚合子句提供它。

from django.db.models import Avg,Sum,Count,Max,Min
# 1、查询所有图书的平均价格
print(models.Book.objects.all().aggregate(avgprice = Avg("price")))

如果你希望生成不止一个聚合,你可以向aggregate()子句中添加另一个参数。所以,如果你也想知道所有图书价格的最大值和最小值,可以这样查询:

print(models.Book.objects.all().aggregate(Avg("price"),Max("price"),Min("price")))
#打印的结果是:  {'price__avg': 174.33333333333334, 'price__max': Decimal('366.00'), 'price__min': Decimal('12.00')}

分组查询 :annotate():为QuerySet中每一个对象都生成一个独立的汇总值。

                                      是对分组完之后的结果进行的聚合

1、统计每一本书的作者个数

    # 方式一:print(models.Book.objects.all().annotate(authorNum = Count("authorlist__name")).values("authorNum"))# 方式二:booklist =models.Book.objects.all().annotate(authorNum=Count("authorlist__name"))for book_obj in booklist:print(book_obj.title,book_obj.authorNum)

2、统计每一个出版社最便宜的书

    # 2、统计每一个出版社的最便宜的书# 方式一:print(models.Book.objects.values("publish__name").annotate(nMinPrice=Min('price')))  注意:values内的字段即group by的字段,,也就是分组条件# 方式二:print(models.Publish.objects.all().annotate(minprice=Min("book__price")).values("name","minprice"))# 方式三publishlist = models.Publish.objects.annotate(minprice = Min("book__price"))for publish_obj in publishlist:print(publish_obj.name,publish_obj.minprice)

3、统计每一本以py开头的书籍的作者个数:

print(models.Book.objects.filter(title__startswith="py").annotate(authNum = Count("authorlist__name")).values("authNum"))

4、统计不止一个作者的图书:

print(models.Book.objects.annotate(num_authors=Count('authorlist__name')).filter(num_authors__gt=1).values("title","num_authors"))

5、根据一本图书作者数量的多少对查询集QuerySet进行排序:

print(models.Book.objects.all().annotate(authorsNum=Count("authorlist__name")).order_by("authorsNum"))

6、查询各个作者出的书的总价格:

 # 方式一print(models.Author.objects.all().annotate(priceSum = Sum("book__price")).values("name","priceSum"))# 方式二print(models.Book.objects.values("authorlist__name").annotate(priceSum=Sum("price")).values("authorlist__name","priceSum"))

转载于:https://www.cnblogs.com/Paul-watermelon/p/10516146.html

Django Mysql数据库-聚合查询与分组查询相关推荐

  1. Mysql数据库的条件查询(聚合函数、分组查询)

    Mysql数据库的条件查询 一.聚合函数 1.聚合函数的介绍 聚合函数又叫组函数,通常是对表中的数据进行统计和计算,一般结合分组(group by)来使用,用于统计和计算分组数据. 常用的聚合函数: ...

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

    一:创建表 书籍模型: 书籍有书名和出版日期,一本书可能会有多个作者,一个作者也可以写多本书,所以作者和书籍的关系就是多对多的关联关系(many-to-many);     一本书只应该由一个出版商出 ...

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

    阅读目录 一.Django ORM 常用字段和参数: 二.单表查询 三.多表查询 基于双下划线的多表查询 四.聚合查询和分组查询 摘要: 单表查询 多表查询 聚合查询 分组查询 一.Django OR ...

  4. day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询

    day08 外键字段的增删改查 正向反向插叙概念 跨表查询 聚合查询与分组查询 F查询 昨日内容复习 自定义过滤器.标签.inclusion_tag 1.首先现在应用目录下创建名字为templatet ...

  5. MySQL数据库中的多表查询含义以及练习~建议码友们点亮拇指+收藏呐~

    MySQL数据库中的多表查询含义以及练习 一. 多表查询含义 二. 多表查询练习 1. 已知表 2. 需求And代码 一. 多表查询含义 查询语法: select列名列表from表名列表where条件 ...

  6. MySQL 数据库 like 语句通配符模糊查询小结

    MySQL 报错:Parameter index out of range (1 > number of parameters, which is 0)--MySQL 数据库 like 语句通配 ...

  7. MySQL对数据表进行分组查询(GROUP BY)

    MySQL对数据表进行分组查询(GROUP BY) GROUP BY关键字可以将查询结果按照某个字段或多个字段进行分组.字段中值相等的为一组.基本的语法格式如下: GROUP BY 属性名 [HAVI ...

  8. mysql数据库表的多条件查询

    mysql数据库表的多条件查询 一.select语句基本查询 SELECT 字段1,字段2....FROM 表名[WHERE 条件] [LIMIT N][ OFFSET M] select可以返回多条 ...

  9. MySQL数据库C接口的数据查询操作示例

    MySQL数据库C接口的数据查询操作示例 命令行操作 (1)建库建表(已有则不用) 连接MySQL服务器,并登录之.选择某个数据库.假设用户在这个数据库下已有一个表了. (2)查询所有数据的方法 SE ...

  10. 【如何通过汉字首字母拼写查询数据】mysql数据库汉字首字母获取查询或通过ES插件elasticsearch-analysis-pinyin进行汉字首拼查询

    一.mysql数据库汉字首字母获取查询 1.汉字提取首字母 get_first_pinyin_char: 此函数是将一个中文字符串的第一个汉字转成拼音字母 (例如:"李"-> ...

最新文章

  1. Functional Programming Contest - September'14
  2. 常用数学符号读法大全
  3. 51Nod 1007 正整数分组 | DP (01背包)
  4. MSDN演练时发现的SqlServer2005数据库连接问题
  5. 【flutter】学习之路(一)环境的搭建
  6. 为了金秋那沉甸甸的麦穗,我绝不辜负春天
  7. java 所有子类_java 查找类的所有子类
  8. 常用的hooks入门
  9. 那些年,我们解析过的前端异常
  10. SAS 146GB*8 RAID5数据恢复过程(HP 双循环)
  11. 至强cpu型号列表_Cascade Lake全家福:图说第二代至强可扩展处理器
  12. 2019matlab安装
  13. Linux虚拟机中vim编辑器常用命令介绍(二)
  14. 小米盒子投屏+android,使用小米盒子手机投屏电视看村晚
  15. C语言-超市仓库管理系统的设计与实现
  16. Visual Studio Code 官方护眼主题绿豆沙颜色修改,让你的眼睛远离疲劳!
  17. 域名邮箱什么,如何开通自定义邮箱后缀的邮箱?
  18. 大数据时代最全的医学公共数据库合集整理
  19. JavaScript看这一篇就够了,简单全面一发入魂
  20. MongoDB数据库—基本操作

热门文章

  1. 华为鸿蒙系统再公测,安卓再见!华为正式发布鸿蒙系统公测版!
  2. 前端jquery学习
  3. 计算机网络在物流领域的应用研究,计算机网络技术在物流经济领域中的应用特点及其作用.doc...
  4. springboot不返回指定的字段(隐藏字段)
  5. java基础总结03-进制
  6. WPF学习笔记(5):两个DataGrid的滚动条实现同步滚动(转)
  7. linux oom-killer
  8. Spring框架中constructor-arg与property理解
  9. SOCKET 478/775是两种主板的CPU接口类型
  10. 找到的The LEGEND of the DRAGON的新下载地址