【django】聚合函数和排序函数(已更新)

这里写目录标题

一、 聚合函数

使⽤aggregate()过滤器调⽤聚合函数。聚合函数包括:Avg平均,Count数量,Max最⼤,Min最⼩,Sum求和,被定义在django.db.models中。

1、例:查询影⽚的总播放量。

from django.db.models import Sum,Avg,Count,Max,Min
FilmInfo.objects.aggregate(Sum('playcount'))
{'playcount__sum': 200420}

注意: aggregate 的返回值是⼀个字典类型,格式如下:
{‘属性名__聚合类⼩写’:值}
如:{‘playcount__sum’: 30000}
使⽤count时⼀般不使⽤aggregate()过滤器。

2、例:查询影⽚总数。

FilmInfo.objects.aggregate(Count('fid'))
{'fid__count': 7}

3、查询电影编号大于1时,一共有多少影片

FilmInfo.objects.filter(fid__gt=1).aggregate(Count('fid'))
{'fid__count': 1}

二、排序

使⽤ order_by 对结果进⾏排序,默认降序排序,如果升序排序,字段前面加-

默认升序

FilmInfo.objects.all().order_by('playcount')
<QuerySet [<FilmInfo: django>, <FilmInfo: 我爱你中国>, <FilmInfo: 我爱你china>, <FilmInfo: 我和我的家人>, <FilmInfo: 金刚狼>, <FilmInfo: 夺冠>, <FilmInfo: shell>]>

降序

FilmInfo.objects.all().order_by('-playcount')
<QuerySet [<FilmInfo: shell>, <FilmInfo: 夺冠>, <FilmInfo: 金刚狼>, <FilmInfo: 我和我的家人>, <FilmInfo: django>, <FilmInfo: 我爱你中国>, <FilmInfo: 我爱你china>]>

特别注意1:只有查询集才能对其进行排序操作,
所以对模型类.objects.get().order_by()进行操作,会报错;

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Django 中,聚合查询是指对模型数据进行统计、分组、排序等操作的查询。而 annotate() 是聚合查询中的一个常用方法,它可以在查询结果中添加一个聚合函数的值,并将该值作为一个新的属性添加到查询结果的每个对象中。 annotate() 方法的参数可以是一个聚合函数,也可以是一个表达式。聚合函数包括:Count、Avg、Sum、Max、Min 等,而表达式则是由模型中的字段和操作符组成的一个字符串。 以下是一些例子: ```python from django.db.models import Count from .models import Book, Author # 统计每个作者的书籍数量 authors = Author.objects.annotate(num_books=Count('book')) # 统计每个作者的平均书籍价格 authors = Author.objects.annotate(avg_price=Avg('book__price')) # 统计每个作者的最高书籍价格 authors = Author.objects.annotate(max_price=Max('book__price')) # 统计每个作者的书籍总价值 authors = Author.objects.annotate(total_price=Sum('book__price')) # 统计每个作者的书籍数量,并将结果按照数量从多到少排序 authors = Author.objects.annotate(num_books=Count('book')).order_by('-num_books') ``` 在上面的例子中,annotate() 方法的参数都是一个字符串,它们表示不同的聚合函数或表达式。其中,`'book'` 表示一个外键,它指向 Book 模型;`'book__price'` 表示一个跨表查询,它找到与 Book 关联的 Price 字段。 所以在使用 annotate() 的时候,需要根据具体的需求来设置参数,将其设置为合适的聚合函数或表达式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

敲代码敲到头发茂密

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值