请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

GROUP3

请问老师,您最后一个练习里打印的好像只有语文成绩?如何将及格学生的所有成绩都打印出来呢?

正在回答 回答被采纳积分+3

1回答

NavCat 2021-08-25 01:10:06

这里是查学生信息,按照学生ID分组后取的第一条,所以只有一条成绩信息。

如果要查所有的成绩,可以在代码中再查一次,如下:

stmt = select(StudentGrade,
              func.count().label('course_count')).where(StudentGrade.score >= 60)\
        .group_by(StudentGrade.student_id)\
        .having(func.count() == 3)
queryset = self.session.execute(stmt).mappings().all()
for item in queryset:
    print(item)
    # 循环各科成绩
    for grade in item.StudentGrade.student.grade_list:
        print(grade)

或者是结合SQL中的GROUP_CONCAT函数将分数这一列拼接起来:如下:

stmt = select(StudentGrade,
              func.count().label('course_count'),
              func.group_concat(StudentGrade.score).label('course_all')
              )\
        .where(StudentGrade.score >= 60)\
        .group_by(StudentGrade.student_id)\
        .having(func.count() == 3)
queryset = self.session.execute(stmt).mappings().all()
for item in queryset:
    print(item)

https://img1.sycdn.imooc.com//szimg/612527eb099236b416930948.jpg

0 回复 有任何疑惑可以回复我~
  • 提问者 ITMOCC #1
    这样打印是因为StudentGrade的__repr__返回 '{}-{}:{}'.format(self.student.stu_name,self.course.course_name,self.score),这里self.course.course_name,self.socre默认的就是语文吗?有没有可能实现只查StudentGrade就实现沈小姐-语文:,沈小姐-数学: ,沈小姐-英语:  这种输出?
    回复 有任何疑惑可以回复我~ 2021-08-25 09:48:54
  • NavCat 回复 提问者 ITMOCC #2
    你看给你的第一种解决方案
    回复 有任何疑惑可以回复我~ 2021-08-25 11:13:28
  • 提问者 ITMOCC 回复 NavCat #3
    哦哦。我还是不太理解为什么grade_list里会有各科的成绩呢?而且还都是按照__repr__打印出来的。
    回复 有任何疑惑可以回复我~ 2021-08-26 00:00:41
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信