072:django数据库orm聚合函数详解-aggregate和annotate(代码片段)

zheng-weimin zheng-weimin     2023-02-20     109

关键词:

ORM聚合函数详解-aggregate和annotate:

aggregate和annotate的区别:

1、aggregate :返回使用聚合函数后的字段和值。
2、annotate :在原来模型字段的基础之上添加一个使用了聚合函数的字段,并且在使用聚合函数的时候,会使用当前这个模型的主键进行分组(group by)。比如以上 Sum 的例子,如果使用的是 annotate ,那么将在每条图书的数据上都添加一个字段叫做 total ,计算这本书的销售总额。而如果使用的是 aggregate ,那么将求所有图书的销售总额。

下面是需求是(基于上节课程情况),求每本书多少钱卖出去的:

def index(request):
    result = Book.objects.annotate(avg=Avg("bookorder__price"))
    print(result)
    for item in result:
        print(item.name, ":", item.avg)
    print(result.query)
    return HttpResponse("success")

结果是:

<QuerySet [<Book: Book object (1)>, <Book: Book object (2)>, <Book: Book object (3)>, <Book: Book object (4)>]>
三国演义 : 89.33333333333333
水浒传 : 93.5
西游记 : None
红楼梦 : None
SELECT `book`.`id`, `book`.`name`, `book`.`pages`, `book`.`price`, `book`.`rating`, `book`.`author_id`, `book`.`publisher_id`, AVG(`book_order`.`price`) AS `avg` FROM `book` LEFT OUTER JOIN `book_order` ON (`book`.`id` = `book_order`.`book_id`) GROUP BY `book`.`id` ORDER BY NULL

实例截图如下:

技术分享图片

 


071:django数据库orm聚合函数详解-avg(代码片段)

ORM聚合函数详解-Avg:Avg:求平均值。比如想要获取所有图书的价格平均值。那么可以使用以下代码实现:fromdjango.db.modelsimportAvgresult=Book.objects.aggregate(Avg(‘price‘))print(result)以上的打印结果是:"price__avg":23.0其中price__avg的结构是... 查看详情

075:django数据库orm聚合函数详解-sum(代码片段)

ORM聚合函数详解-Sum:Sum:求指定对象的总和。比如要求图书的销售总额。那么可以使用以下代码实现:fromdjang.db.modelsimportSumresult=Book.objects.annotate(total=Sum("bookstore__price")).values("name","total")以上的代码annotate的意思是给Book表在查询... 查看详情

$django聚合函数分组查询f,q查询orm字段以及参数

   一.聚合函数   fromdjango.db.modelsimportAvg,Sum,Max,Min,Count,F,Q #导入   #.查询图书的总价,平均价,最大价,最小价   #ret=Books.objects.aggregate(Avg(‘price‘) 查看详情

django之orm详解(代码片段)

django中内置了orm,可以让我们非常便捷的操作数据库。在看本文前,请确保已经对django项目做了正确的配置。1.在app01下的models.py中新建类fromdjango.dbimportmodels#Createyourmodelshere.classUser(models.Model):#intidprimarykeyauto_incrementid=models.AutoFiel... 查看详情

第六章django框架学习——orm详解(代码片段)

...简单介绍)什么是ORM(what):ORM是通过使用描述对象和数据库之间映射的元数 查看详情

django功能六(代码片段)

...)annotateF与Q查询django中如何开启事务orm中常用字段及参数数据库查询优化(only与defer、select_related与prefetch_related)图书管理系统作业讲解今日内容详细聚合查询#聚合查询aggregate""& 查看详情

复杂的 Django ORM 注释和聚合

】复杂的DjangoORM注释和聚合【英文标题】:ComplexDjangoORMAnnotations&Aggregations【发布时间】:2021-01-2009:57:32【问题描述】:我目前正在将一些记录的项目准备为JSON序列化格式。我正在尝试通过Django的内置ORM,利用注释和聚合来做... 查看详情

django(10)orm聚合查询(代码片段)

...annotate()三、F()查询四、Q()查询此文章参考菜鸟教程:DjangoORM–多表实例(聚合与分组查询)|菜鸟教程(runoob.com)Django版本:>>>django.VERSION(4,1,0,'final',0)PS: 查看详情

django(10)orm聚合查询(代码片段)

...annotate()三、F()查询四、Q()查询此文章参考菜鸟教程:DjangoORM–多表实例(聚合与分组查询)|菜鸟教程(runoob.com)Django版本:>>>django.VERSION(4,1,0,'final',0)PS: 查看详情

在 django orm 中聚合多对多

】在djangoorm中聚合多对多【英文标题】:aggregateonmanytomanyindjangoorm【发布时间】:2021-03-0405:42:14【问题描述】:我想创建一份顾问在本月建议的持续时间总和的报告。我的模型:classAdviser(models.AbstractBaseModel):user=models.OneToOneField(\'... 查看详情

Django ORM - 具有不同选择子句的分组聚合

】DjangoORM-具有不同选择子句的分组聚合【英文标题】:DjangoORM-Groupedaggregateswithdifferentselectclauses【发布时间】:2013-07-2703:34:14【问题描述】:假设我们有DjangoORM模型Meetup,其定义如下:classMeetup(models.Model):language=models.CharField()spea... 查看详情

067:django数据库orm查询条件详解-range(代码片段)

【Django数据库】ORM查询条件详解-rangerange:判断某个field的值是否在给定的区间中。示例代码如下:#views.py文件内容:fromdatetimeimportdatetimefromdjango.utils.timezoneimportmake_awaredefindex(request):start_time=make_aware(datetime(year=2019,month=1,day=7,hour=2... 查看详情

django之操作数据库

1:数据库:2:MySQL驱动程序的安装3:Django配置连接数据库4:在Django中操作数据库  (1)原生SQL语句操作  (2)ORM模型操作5:ORM模型的介绍6:映射模型到数据库中7:模型常用的属性  (1)常用的Field字段  (2)Field... 查看详情

Django ORM:按相关表过滤器的聚合排序

】DjangoORM:按相关表过滤器的聚合排序【英文标题】:DjangoORM:sortbyaggregateoffilterofrelatedtable【发布时间】:2012-10-3011:19:43【问题描述】:这是我的模型的一个子集:classCase(models.Model):...#primarykeyisnamed"id"classEmployee(models.Model):...#prim... 查看详情

在 Django ORM 中对子查询使用聚合

】在DjangoORM中对子查询使用聚合【英文标题】:UsingaggregationonsubqueryinDjangoORM【发布时间】:2022-01-2110:49:00【问题描述】:我有一张这样的桌子CategorySubcategorySub_subcategoryCat_1Subcat_1Sub_subcat_1Cat_1Subcat_1Sub_subcat_2Cat_1Subcat_2Sub_subcat_3Cat_... 查看详情

django基础aggregate和annotate方法使用详解与示例

...()方法详解aggregate的中文意思是聚合,源于SQL的聚合函数。Django的aggregate()方法作用是对一组值(比如queryset的某个字段)进行统计计算,并以字典(Dict)格式返回统计计算结果。django的aggregate方法支持的聚合操作有AVG/COUNT/MAX/MIN/SUM等。... 查看详情

Python函数调用与数据库查询(django ORM)开销

】Python函数调用与数据库查询(djangoORM)开销【英文标题】:Pythonfunctioncallvsdatabasequery(djangoORM)overhead【发布时间】:2021-04-2520:48:39【问题描述】:在Django项目中工作时,当我发现如果我使用函数调用(例如datetime.today())可以减... 查看详情

django---进阶6(代码片段)

...组查询F与Q查询django中如何开启事务orm中常用字段及参数数据库查询优化图书管理系统作业聚合查询#聚合查询aggregate"""聚合查询通常情况下都是配合分组一起使用的只要是跟数据库相关的模块基本上都在django.db.models... 查看详情