⚡ 编程实验室🏗️ HTML🎨 CSS⚡ JavaScript🐍 Python🗄️ SQL☕ Java⚛️ React💚 Vue🟢 Node.js⚙️ C语言🐘 PHP🐹 Go🔷 TypeScript🐬 MySQL🔧 C++🎯 C#🦀 Rust🅱️ Bootstrap💡 jQuery🎸 Django🍃 MongoDB👗 Sass🎪 Kotlin📊 R语言📋 XML📊 Excel🐘 PostgreSQL🐳 Docker🅰️ Angular🎮 游戏🏠 网站首页

子查询与窗口函数:在 ORM 中实现复杂报表聚合

超越简单的 annotate 和 aggregate,使用 Subquery、Window 和 Exists 实现分组内排名、累计和、多表关联聚合。 · 难度:入门 · +10XP

子查询与窗口函数:在 ORM 中实现复杂报表聚合

普通教程只教 Count、Sum。本教程将演示:1) 使用 Subquery 获取每个分类下最新商品的名称;2) 使用 Window + RowNumber 实现分组内排名(如每个部门薪水前三名);3) 使用 Exists 优化 N+1 查询。通过真实场景(电商订单统计、学生成绩排名)让你掌握 ORM 的深层能力,避免写原生 SQL。

from django.db.models import Subquery, OuterRef, Window, F
from django.db.models.functions import RowNumber

# 每个分类下最新商品 latest_per_category = Product.objects.filter( category=OuterRef('pk') ).order_by('-created_at').values('name')[:1]

Category.objects.annotate( latest_product=Subquery(latest_per_category) )

# 订单按金额排名 Order.objects.annotate( rank=Window( expression=RowNumber(), order_by=F('total_price').desc() ) )

Ctrl+Enter
🚀 升级VIP
解锁全部课程+AI助手

🏆 学习排行

加载中...

📊 统计

📖 189 篇
0 完成
🔥 0