在学习Django聚合与分组查询中,发现value与annotate的顺序不同时,查询结果大相径庭,经过一下午的研究,终于弄明白了,现在分享给大家,先上结论: 结论 value在annotate前面时,相当于group by,即models.表名.objects.values('group by 字段').annotate(统计字段) value放在annotate后面时,相当于select annotate前面没有value时,默认按当前表的主键分组 验证 表格准备 查询 value放在前面时…
前期准备: 创建表 class Book(models.Model): title = models.CharField(max_length=32) price = models.DecimalField(max_digits=8,decimal_places=2) publish_time = models.DateField(auto_now_add=True) #该字段新增数据会自动添加实时时间 #出版社 一对多 外键字段建在多的一方 publish = models.ForeignKe…
聚合查询 聚合对查询的结果进行一步的计算加工. aggregate()是QuerySet 的一个终止子句 ,他的作用是,返回一个包含一些键值对的字典.键的名称是聚合值的标识符,值是计算出来的聚合值.键的名称是按照字段和聚合函数的名称自动生成出来的. 用到的内置函数: from django.db.models import Avg, Sum, Max, Min, Count [示例] # 查询价格最高的书和价格最低的书 ret = models.Book.objects.all().aggreg…
ret=Emp.objects.values('dep').annotate(avg_salary=Avg('salary')) print(ret) # ---*******单表分组查询ORM总结:表名.objects.values('group by 的字段').annotate(聚合函数('统计的字段') from django.db.models import Avg,Count,Min,Max ret = models.Publish.objects.values('nid').ann…
分组查询.F查询和Q查询 分组查询 统计每个出版社出版的书籍的平均价格 第一种方式 obj = models.Book.objects.values('publishs_id').annotate(a=Avg('price')) ## select avg (price) from app01_ book GROUP BY publishs_ id; 第二种方式 obj = models.Publish.objects.annotate(a=Avg('book__price')) return…
聚合统计 属性 说明 Min 最小值 Max 最大值 Sum 总和 Count 记录数,也就是多少行记录 Missing 结果集中,有多少条记录是空值 SumOfSquares 平方和(x1^2 + x2^2+xn^2) Mean 平均数(x1+x2+xn)/n StdDev 标准差 示例: ISolrOperations<Product> solr = ... var results = solr.Query(SolrQuery.All, new QueryOptions { Rows =…
from django.db.models import Q 查询书籍名称是python入门或者价是555.55的书 book_queryset = models.Book.objects.filter(Q('title'='python入门')|Q('price'=555.55)) print(book_queryset) Q查询进阶用法 用Q产生对象 然后再使用 q = Q() q.connector('or') 添加查询条件 title__icontains为查询条件,同其他查询方式的写法…
代码: from django.db.models import Sum alarm_sum_group_items = models.FILE_PROTECT_ALARM.objects.filter(customer_id=customer_id).values('device_hash').annotate(alarm_sum=Sum('cmn_merge_count')) data = [] for item in alarm_sum_group_items: tmp = {} tmp[…
聚合函数 名称 作用 Max() 最大值 Min() 最小值 Sum() 求和 Count() 计数 Avg() 平均值 关键字: aggregate 聚合查询通常都是配合分组一起使用的 关于数据库的模块 基本上都在django.db.models里面 如果上述没有那么应该在django.db里面…
一.聚合查询 需要导入模块:from django.db.models import Max, Min, Sum, Count, Avg 关键语法:aggregate(聚合结果别名 = 聚合函数(参数)) 查询结果:使用聚合函数,从每一个组中获取结果:字典 注意点: 1 聚合函数必须在分组之后才能使用 2 没有分组,即默认整体就是一组 3 查询结果为 普通字典 """ 聚合查询通常情况下都是配合分组一起使用的 只要是跟数据库相关的模块 基本上都在 django.db.mode…