SQL Query依赖于另一个表的COUNT? - SQLAlchemy

时间:2010-10-30 04:15:32

标签: python sql sqlalchemy

我需要一个查询,它可以返回表A中包含表B中大于COUNT条记录的记录。查询需要能够与可能应用于表A的其他过滤器一致。

案例研究案例:

我有一个人和约会表。我正在寻找所有参加过5次以上预约的人。它还必须支持人员表上的额外过滤器语句,例如年龄> 18。

编辑 - 解决方案

subquery = db.session.query(Appointment.id_person, 
                            func.count('*').label('person_count')) \
                     .group_by(Appointment.id_person).subquery()
qry = db.session.query(Person) \
                .outerjoin((subquery, Person.id == subquery.c.id_person)) \
                .order_by(Person.id).filter(subquery.c.person_count >= 5).filter(Person.dob <= '1992-10-29')

2 个答案:

答案 0 :(得分:1)

使用子查询:

SELECT * from person
WHERE PersonID IN 
  (SELECT PersonId FROM appointments
   GROUP BY PersonId
   HAVING COUNT(*) >= 5)
AND dob > 25

答案 1 :(得分:0)

SELECT Person.PersonID, Person.Name
FROM Person INNER JOIN Appointment
ON Person.PersonID = Appointment.PersonID
GROUP BY Person.PersonID, Person.Name
HAVING COUNT(Person.PersonID) >= 5