Python 如何在外部连接sqlalchemy中添加group by
我在sqlalchemy中加入同一张表3次。我想要分组依据Python 如何在外部连接sqlalchemy中添加group by,python,orm,sqlalchemy,Python,Orm,Sqlalchemy,我在sqlalchemy中加入同一张表3次。我想要分组依据ecs2.id如果ecs2.school\u class\u id==None(分组依据以防返回任何结果) 我已按“ecs2.id”添加了分组,但如果ecs2.id为None,则它将分组。这意味着它不返回任何结果,因此任何连接ecs2的结果都是空的,那么只返回一个结果 此查询工作正常,但有时会在重复的ecs.id或ecs.school\u class\u id ecs1 = aliased(EmployeeClassSubject) ec
ecs2.id
如果ecs2.school\u class\u id==None
(分组依据以防返回任何结果)
我已按“ecs2.id”添加了分组,但如果ecs2.id为None,则它将分组。这意味着它不返回任何结果,因此任何连接ecs2
的结果都是空的,那么只返回一个结果
此查询工作正常,但有时会在重复的ecs.id
或ecs.school\u class\u id
ecs1 = aliased(EmployeeClassSubject)
ecs2 = aliased(EmployeeClassSubject)
ecs3 = aliased(EmployeeClassSubject)
sc1 = aliased(SchoolClass)
sc2 = aliased(SchoolClass)
e1 = aliased(Employee)
e2 = aliased(Employee)
emp = db.session.query(e1, School.name, ecs1, ecs2, sc1, sc2, Subject.id,
Subject.name,BusInf,ecs3.employee_id,e2.name).\
join(School, School.id == e1.school_id).\
outerjoin(sc1, and_(sc1.school_id == School.id,
sc1.status == GenEnum.ACTIVE.value,
e1.employee_type.in_(super_users))).\
outerjoin(ecs1, and_(ecs1.school_class_id == sc1.id,
ecs1.status == GenEnum.ACTIVE.value,
ecs1.relation == OtherType.CLASS_TEACHER.value)).\
outerjoin(e2, e2.id == ecs1.employee_id).\
outerjoin(ecs2, and_(ecs2.employee_id == e1.id,
ecs2.status == GenEnum.ACTIVE.value,
e1.employee_type.notin_(super_users))).\
outerjoin(sc2, and_(sc2.id == ecs2.school_class_id,
sc2.status == GenEnum.ACTIVE.value)).\
outerjoin(ecs3, and_(ecs3.school_class_id == ecs2.school_class_id,
ecs3.status == GenEnum.ACTIVE.value,
ecs3.relation == OtherType.CLASS_TEACHER.value)).\
outerjoin(Subject, and_(Subject.id == ecs2.subject_id,
ecs2.subject_id != None)).\
outerjoin(BusInf, and_(BusInf.contact_person == e1.id,
e1.employee_type == UserType.SUPPORTINGSTAFF.value)).\
filter(e1.id == login_employee[2].id).\
order_by(sc1.standard, sc1.division, sc2.standard, sc2.division).all()
当我添加groupby函数时
ecs1 = aliased(EmployeeClassSubject)
ecs2 = aliased(EmployeeClassSubject)
ecs3 = aliased(EmployeeClassSubject)
sc1 = aliased(SchoolClass)
sc2 = aliased(SchoolClass)
e1 = aliased(Employee)
e2 = aliased(Employee)
emp = db.session.query(e1, School.name, ecs1, ecs2, sc1, sc2, Subject.id,
Subject.name,BusInf,ecs3.employee_id,e2.name).\
join(School, School.id == e1.school_id).\
outerjoin(sc1, and_(sc1.school_id == School.id,
sc1.status == GenEnum.ACTIVE.value,
e1.employee_type.in_(super_users))).\
outerjoin(ecs1, and_(ecs1.school_class_id == sc1.id,
ecs1.status == GenEnum.ACTIVE.value,
ecs1.relation == OtherType.CLASS_TEACHER.value)).\
outerjoin(e2, e2.id == ecs1.employee_id).\
outerjoin(ecs2, and_(ecs2.employee_id == e1.id,
ecs2.status == GenEnum.ACTIVE.value,
e1.employee_type.notin_(super_users))).\
outerjoin(sc2, and_(sc2.id == ecs2.school_class_id,
sc2.status == GenEnum.ACTIVE.value)).\
outerjoin(ecs3, and_(ecs3.school_class_id == ecs2.school_class_id,
ecs3.status == GenEnum.ACTIVE.value,
ecs3.relation == OtherType.CLASS_TEACHER.value)).\
outerjoin(Subject, and_(Subject.id == ecs2.subject_id,
ecs2.subject_id != None)).\
outerjoin(BusInf, and_(BusInf.contact_person == e1.id,
e1.employee_type == UserType.SUPPORTINGSTAFF.value)).\
filter(e1.id == login_employee[2].id).\
group_by(ecs2.id).\
order_by(sc1.standard, sc1.division, sc2.standard, sc2.division).all()
当ecs2不是None时,这可以正常工作,但在其他情况下,它只返回一个结果
在sqlalchemy中,有没有任何方法可以使组处于条件下