django ORM的演练 0317

本文深入探讨了使用SQL进行复杂查询的方法,包括一对多关系的处理、聚合函数的应用、条件筛选及去重等技巧,旨在提升数据库操作效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

第一题

在这里插入图片描述

自测

同学类.objects.annotate(avg=Avg(成绩表名小写__平均成绩)).filter(avg__gt=60)

同学与成绩是一对多

多方在成绩表

答案

在这里插入图片描述

第二题

在这里插入图片描述

自测

学生类.objects.annotate(subject_num = Count(分数表), score_sum = Sum(分数表__num)).values(‘id’,‘name’,‘subject_num’, '‘score_sum’)

答案

在这里插入图片描述

第三题

在这里插入图片描述

自测

先查出姓李老师
再查个数

老师表.objects.filter(name__contains='李').count()

答案

在这里插入图片描述

第四题

在这里插入图片描述

答案

先找到学过李老师的学生

然后进行排除

在这里插入图片描述

在这里插入图片描述

第五题

在这里插入图片描述

》自测

查学生

学生表的分数表的课程id 在 1,2


学生类.objects.annotate(分数类__课程__id__in=[1,2]).values('id','name')

》 答案

在这里插入图片描述

结果里面有重复的数据

在这里插入图片描述

去除重复

在这里插入图片描述

第六题

在这里插入图片描述

》自测

查学生表

1 查出学过黄老师课的同学

学生表的分数的课程的老师的名字=黄老师

2 黄老的所有课的数量

老师表的名字=黄老师

老师对象的课程数量

老师.课程类名小写_set.all().count()

3 查出每个学生学习黄老师课的数量

学生类.objects.annotate(成绩__课程__老师__名字=李老师)

成绩__课程

黄老师的课数量

黄老行

老师表.objects.get(姓名=黄老师)

黄老师的课
num = 黄老师.objects.aggregate(num = Count(course))

学生类.objects.annotate(num=Count(分数__课程表__teacher=黄老师) ).filter(num=teacher_num)

》思路步骤

在这里插入图片描述

第一步

统计出学生学习了黄老师的课程的数量

在这里插入图片描述

第二步

已学习的课程数量与总数量进行比对的一个过滤

在这里插入图片描述

第三步 字段的控制

在这里插入图片描述

其它练习题

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值