Django 查询的“最后一公里”:聚合 + 排序,一行代码完成统计与排行
【摘要】 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)