2023年7月20日发(作者:)
Django中ORM聚合查询aggregate和分组查询annotateDjango中ORM聚合查询aggregate和分组查询annotate聚合查询-aggregate聚合查询是使⽤aggregate()过滤器调⽤聚合函数.聚合函数从引⼊聚合函数包括: Avg 平均,Count 数量,Max 最⼤,Min 最⼩,Sum 求和from import Avg,Max,Min,Count,Sum聚合查询返回的数据类型为字典类型字典的格式为:键的名称默认是属性名__聚合函数名⼩写,值就是计算出来的聚合值如果需要⾃定义返回字典的键的名称,可以起别名aggregate(别名 = 聚合函数名"属性名"))aggregate()是查询集QuerySet的⼀个终⽌⼦句,意思就是使⽤aggregate()之后的结果就不是查询集了,就不能使⽤查询集的⽅法了例如 : 计算所有图书的平均价格from 假装模型类都存在,我只写查询语句res = ate(Avg("price"))# Book为Django中模型类, price为模型类中的字段名#
在使⽤aggregate()查询时all()可以省略print(res)******打印结果⼤致为>>>{'price__avg':聚合值}分组查询-annotate分组查询⼀般也会⽤到聚合函数from import Avg,Max,Min,Count,Sum分组查询后的返回值与聚合查询后的返回值不同1. 分组后⽤values取值,则返回值是QuerySet数据类型⾥⾯为⼀个⼀个的字典2. 分组后⽤values_list取值,则返回值是QuerySet数据类型⾥⾯为⼀个⼀个的元祖annotate ⾥⾯放的是聚合函数values或者values_list 放在annotate前⾯: 表⽰values或values_list是声明以什么字段分组,annotate执⾏分组values或者values_list放在annotate后⾯: annotate表⽰直接以当前表的pk执⾏分组, values或者values_list表⽰查询那些字段, 并且要将annotate⾥的聚合函数起别名, 在values或者values_list⾥⾯写其别名例: 统计每个出版社的最便宜的书的价格:res = ("name").annotate(in_price = Min("book__price"))#
先以出版社的名字进⾏分组,
然后再使⽤聚合函数查询到每个出版社⾥⾯最便宜的书籍例2: 查询出各个作者出的书的总价格res = te(all = Sum("book_price")).values("name", "all")
发布者:admin,转转请注明出处:http://www.yc00.com/web/1689824627a288913.html
评论列表(0条)