編集:私の古いメッセージを削除しました。混乱していました。そして私は今自分の質問に答えることができません。ジョインとクエリの問題
見つかった問題はGROUP BYに由来します。
いくつかの調査の末、グループ化された行内のグループa列に対してGROUP BYを使用できないことがわかりました。
ので、予想通り、この作品:
SELECT candidats.*
, AVG(test_results.rate_good_answer) AS toto
FROM "candidats"
LEFT JOIN "sessiontests"
ON "sessiontests"."candidat_id" = "candidats"."id"
LEFT JOIN "test_results"
ON "test_results"."sessiontest_id" = "sessiontests"."id"
LEFT JOIN "questionnaires"
ON "questionnaires"."id" = "test_results"."questionnaire_id"
WHERE (sessiontests.terminate = 't')
AND ("questionnaires"."category" LIKE '%java%')
GROUP BY candidats.id
ORDER BY toto
しかし、これはtest_resultsで唯一の私のコラムにグループ化されます:
SELECT candidats.*,
FROM "candidats"
LEFT JOIN "sessiontests"
ON "sessiontests"."candidat_id" = "candidats"."id"
LEFT JOIN "test_results"
ON "test_results"."sessiontest_id" = "sessiontests"."id"
LEFT JOIN "questionnaires"
ON "questionnaires"."id" = "test_results"."questionnaire_id"
WHERE (sessiontests.terminate = 't')
AND ("questionnaires"."category" LIKE '%java%')
GROUP BY candidats.id, test_results.rate_good_answer
ORDER BY AVG(test_results.rate_good_answer)
編集3:
は私の問題は、2番目のクエリは、それぞれを返すありました候補者ごとに異なるtest_results行がありますが、私はcandidateatごとに1行戻ってくると予想していました。
最初のクエリは答えであり、うまくいきます。
代わりに "candidats"、 "id"をグループ化しようとしましたか? –
例を含めることで、結果を並べ替える方法を明確にすることはできますか?平均(または他の集計関数)でソートすると、集計関数は常にグループ内で同じ値を持つため、結果はグループ内でソートされません。また、MySQLを使用していますか? –
ちょうど試してみましたが、私のsqlite:pがクラッシュしました。しかし、私はすでに知っていた、それは動作するつもりはなかった。 ORDER BYで集約関数を使用する場合は、この列をGROUP BYにする必要があるためです。 @マーク、現在私の問題は解決されています。私の質問は本当に混乱していたので、答えを追加するだけです。私の最初のクエリは期待通りに機能します。 – Perello