Django分组聚合查询实例分享分组聚合查询实例分享
多表查询多表查询
1. 增删改
一对多:先一后多,外键可以为对象或依赖表的主键(publish and book)
publish = Publish.objects.create()
Book.objects.create(....publish=publish|publish_id=publish.id)
删: 默认存在级联删除
改: book修改外键,外键一定存在
多对多:
关系表的获取(book(主键) and author) book.author
增:book.author.add(作者对象们|主键们)
删: clear()清除 remove() 可删除单个作者
改: set([作者对象们|主键们])
2. 查
基于对象,正向找属性,反向找类名小写,多条记录类名小写_set
book.publish.first().name (book 一定是对象,不是queryset)
publish.book_set.first().name
基于双下划线:
Book.objects.filter(id=1).values('publish__name')[0] (values 查出的也是queryset)
publish.values('book__name')
今日内容
1. 分组查询: 聚合结果 group_by()
2. 聚合函数
3. 字段
分组查询(单独聚合查询 and 分组聚合查询—基于mysql)
Book: id name price publish_date publish
聚合函数可以单独使用 —- 整张表是一个大组
select max(price) from book
聚合函数在分组下使用
select max(price) as high_price from book group by publish having high_price > 50;
聚合查询—基于ORM
聚合函数的使用场景:
单独使用:不分组,只查聚合结果
分组使用: 按字段分组,可查分组字段与聚合结果
导入聚合函数:
from django.db.models import Avg,Max,Min,Count,Sum
单独聚合查询:单独聚合查询:aggregate (聚集,合集聚集,合集)—不分组不分组