第一题

自测
同学类.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)
》思路步骤

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

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

第三步 字段的控制

其它练习题

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

被折叠的 条评论
为什么被折叠?



