Django 查询的“最后一公里”:聚合 + 排序,一行代码完成统计与排行

举报
周杰伦本人 发表于 2025/08/31 20:20:01 2025/08/31
【摘要】 Django 查询的“最后一公里”:聚合 + 排序,一行代码完成统计与排行 1️⃣ 聚合函数:5 个单词背下来函数作用示例Sum求和总阅读量Max最大值最高阅读量Min最小值最低阅读量Avg平均值平均阅读量Count计数书籍总数这些都是sql中常用的关键字,想必大家应该都知道,那在Python中怎么写的? 用法模板(死记 10 秒)from django.db.models import ...

Django 查询的“最后一公里”:聚合 + 排序,一行代码完成统计与排行


1️⃣ 聚合函数:5 个单词背下来

函数 作用 示例
Sum 求和 总阅读量
Max 最大值 最高阅读量
Min 最小值 最低阅读量
Avg 平均值 平均阅读量
Count 计数 书籍总数

这些都是sql中常用的关键字,想必大家应该都知道,那在Python中怎么写的?

用法模板(死记 10 秒)

from django.db.models import Sum, Max, Min, Avg, Count

# 统计整表
BookInfo.objects.aggregate(total_read=Sum('read_count'))
# 返回 {'total_read': 126}
  • 返回类型:字典

  • 键规则:通常是字段__聚合函数名(可自定义别名)

  • 然后用等号给自己定义的键进行赋值


2️⃣ 排序:升序 / 降序一键切换

# 升序(默认)
BookInfo.objects.all().order_by('read_count')

# 降序
BookInfo.objects.all().order_by('-read_count')   # 注意负号

注意降序是加了个负号

场景 代码 等价 SQL
价格从低到高 .order_by('price') ORDER BY price ASC
价格从高到低 .order_by('-price') ORDER BY price DESC

3️⃣ 实战演练:京东商品页复刻

需求:先把服务器按销量求和,再按价格降序展示

from django.db.models import Sum

Product.objects\
       .annotate(total_sales=Sum('sold_count'))\
       .order_by('-price')

annotate和aggregate有一定的区别

方法 作用 结果行数 返回
aggregate() 整表汇总 1 行 字典
annotate() 逐行计算 原行数不变 QuerySet(每行多一个字段)

4️⃣ 记忆口诀

聚合用 aggregate,排序用 order_by
升序直接写字段,降序前面加 - 号!


5️⃣ 30 秒小练习

填空:

查询所有书的平均阅读量,并按平均阅读量降序排列

BookInfo.objects.aggregate(avg_read=___('read_count'))
BookInfo.objects.all().order_by(___)

答案:Avg'-read_count'

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。