我需要一个查询,它可以返回表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')
答案 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