代码之家  ›  专栏  ›  技术社区  ›  Gladius

依赖于其他表计数的SQL查询?-炼金术

  •  1
  • Gladius  · 技术社区  · 15 年前

    示例案例研究:

    我有个人和预约表。我要找的是所有参加过5次或更多约会的人。它还必须支持person表上的额外筛选语句,如age>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 回复  |  直到 15 年前
        1
  •  1
  •   Kevin Stricker    15 年前

    使用子查询:

    SELECT * from person
    WHERE PersonID IN 
      (SELECT PersonId FROM appointments
       GROUP BY PersonId
       HAVING COUNT(*) >= 5)
    AND dob > 25
    
        2
  •  0
  •   alecxe    13 年前
    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