GROUP3
来源:5-15 使用ORM查询数据-分组和去重

ITMOCC
2021-08-23
请问老师,您最后一个练习里打印的好像只有语文成绩?如何将及格学生的所有成绩都打印出来呢?
写回答
1回答
-
NavCat
2021-08-25
这里是查学生信息,按照学生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)
062021-08-27