django数据查询之聚合查询和分组查询
程序员文章站
2022-04-19 10:03:16
<1> aggregate(*args,**kwargs): 通过对QuerySet进行计算,返回一个聚合值的字典。aggregate()中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。 <2> annotate(*args,**kwargs): 可以通过计算查询结果中每一个对象所 ......
<1> aggregate(*args,**kwargs):
通过对queryset进行计算,返回一个聚合值的字典。aggregate()中每一个参数都指定一个包含在字典中的返回值。即在查询集上生成聚合。
1 from django.db.models import avg,min,sum,max 2 3 从整个查询集生成统计值。比如,你想要计算所有在售书的平均价钱。django的查询语法提供了一种方式描述所有 4 图书的集合。 5 6 >>> book.objects.all().aggregate(avg('price')) 7 {'price__avg': 34.35} 8 9 aggregate()子句的参数描述了我们想要计算的聚合值,在这个例子中,是book模型中price字段的平均值 10 11 aggregate()是queryset 的一个终止子句,意思是说,它返回一个包含一些键值对的字典。键的名称是聚合值的 12 标识符,值是计算出来的聚合值。键的名称是按照字段和聚合函数的名称自动生成出来的。如果你想要为聚合值指定 13 一个名称,可以向聚合子句提供它: 14 >>> book.objects.aggregate(average_price=avg('price')) 15 {'average_price': 34.35} 16 17 18 如果你也想知道所有图书价格的最大值和最小值,可以这样查询: 19 >>> book.objects.aggregate(avg('price'), max('price'), min('price')) 20 {'price__avg': 34.35, 'price__max': decimal('81.20'), 'price__min': decimal('12.99')}
<2> annotate(*args,**kwargs):
可以通过计算查询结果中每一个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和),即为查询集的每一项生成聚合。
参考来源:
推荐阅读
-
利用Django框架中select_related和prefetch_related函数对数据库查询优化
-
用实例详解Python中的Django框架中prefetch_related()函数对数据库查询的优化
-
Oracle数据库之七 多表查询
-
基于Geomesa服务查询轨迹数据无法根据空间和时间范围进行结果查询
-
Sql_从查询的结果集中分组后取最后有效的数据成新的结果集小记(待优化)
-
jQuery查询数据返回object和字符串影响原因是什么
-
SQL 查询和删除重复字段数据的方法
-
Python Pandas DataFrame:查询数据or选择数据(selection)之loc,iloc,at,iat,ix的用法和区别
-
关于Django ForeignKey 反向查询中filter和_set的效率对比详解
-
跟老齐学Python之使用Python查询更新数据库