私は複雑なデータベースモデルをDjangoに設定しており、フィルタデータに基づいていくつかの計算を行う必要があります。私は、Test
オブジェクト、TestAttempt
オブジェクト、およびUserProfile
オブジェクト(テストするための外部キーと、userprofileへの外部キー)を持っています。テストスコアを計算するTestAttempt
で実行する方法があります(各テストに関連する正しい回答と比較して、ユーザーが提供する選択肢の数に基づいています)。そして、私がTest
で実行している別の方法は、それぞれの関連するTestAttempt
に基づいて平均テストのスコアを計算しますが、時には特定のセットにリンクされているTestAttempt
の付属サブセットUserProfiles
です。したがって、特定のテストの平均テストスコアをこのように計算する代わりに、これらの値を平均化して平均化することができます。 user_id_list
は、私は、リストの形式で平均テストスコアを見つけるしたいのUserProfileのIDの特定のサブセットであるdjangoの効率性クエリーセットの検索
[x.score() for x in self.test_attempts.filter(profile__id__in=user_id_list).all()]
: 私はこのようなクエリを実行します。私の質問はこれです:もしuser_id_list
が本当にUserProfile
のセット全体であるなら(フィルタはself.test_attempts.all()
と同じになります)、ほとんどの場合、この場合に当てはまります。フィルタをまったく実行しないでください。または__inルックアップで十分に効率的です。user_id_list
にすべてのユーザーが含まれていても、フィルタを実行する方が効率的です。また、結果として得られるtest_attemptsをdistinct()にすることについて心配する必要はありますか?彼らは私のクエリーセットの構造で重複を立てることはできませんか?
EDIT:配列こと
SELECT "mc_grades_testattempt"."id", "mc_grades_testattempt"."date",
"mc_grades_testattempt"."test_id", "mc_grades_testattempt"."student_id" FROM
"mc_grades_testattempt" INNER JOIN "mc_grades_userprofile" ON
("mc_grades_testattempt"."student_id" = "mc_grades_userprofile"."id") WHERE
("mc_grades_testattempt"."test_id" = 1 AND "mc_grades_userprofile"."user_id" IN (1, 2, 3))
注:フィルター付き
SELECT "mc_grades_testattempt"."id", "mc_grades_testattempt"."date",
"mc_grades_testattempt"."test_id", "mc_grades_testattempt"."student_id" FROM
"mc_grades_testattempt" WHERE "mc_grades_testattempt"."test_id" = 1
と、この:生のSQLクエリを見に興味があります誰のためには、フィルタなし、このようになります。 (1,2,3)は単なる例です
両方の場合に生成されるSQLは何ですか? –
わからない、特定のクエリセットのSQLを出力するにはどうすればよいですか?編集、それを考え出した。私にそれを見つけるための瞬間を与えてください – ecbtln
SQLクエリが追加されました – ecbtln