は、私はテーブルの次のセットを持っています最大能力、関連する情報提供者の能力の合計。 SQLAlchemy
でこれを行うきれいな方法はありますか?私は以下を試しました:SQLAlchemyのサブクエリ比較
db.session.query(Job.id).filter(\
db.session.query(db.func.sum(Informant.max_students)). \
filter(Informant.job_id == Job.id) <= \
db.session.query(db.func.count(1)).select_from(queues). \
filter(queues.c.job_id == Job.id))
これはSELECT jobs.id FROM jobs WHERE 0 = 1
のようなものです。前に似たようなクエリをうまく使っているので、私が紛失しているものがありますか?または、生のSQLを実行するのにdb.engine.execute
を使用する方がよいでしょうか?
「max_students」をJobに移動してみませんか?それ以降はクエリがはるかに簡単になります。 –
情報提供者は、奉仕したい学生の最大量を選択するためです。完全な情報提供者の仕事を持つ情報提供者がいなくなった場合、学生は同じ職場の新しい情報提供者のために待ち行列に入れなければなりません。私は、クエリがかなり複雑であることを知っている、多分私はちょうどジョブがキューイングのために開いている場合フラグを設定します。生徒は最初に情報提供者を選択し、情報提供者がいっぱいであるかどうかを知る必要があります。そうであれば、彼らは情報提供者の仕事のために待ち行列に入れられます。 – Y4sper
さて、次に何ですか?私は 'max_students'カラムを' jobs'テーブルに置くことができると思います。 'job_id'が' informants'で一意でない場合は、 'jobs'テーブルの1行にまとめることができます。あなたはとにかく、今は - SUMによってあなたの質問にします。私は '情報提供者 'の表になる必要はない。 –