2011-10-19 13 views
0

編集:私の古いメッセージを削除しました。混乱していました。そして私は今自分の質問に答えることができません。ジョインとクエリの問題

見つかった問題は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行戻ってくると予想していました。

最初のクエリは答えであり、うまくいきます。

+0

代わりに "candidats"、 "id"をグループ化しようとしましたか? –

+0

例を含めることで、結果を並べ替える方法を明確にすることはできますか?平均(または他の集計関数)でソートすると、集計関数は常にグループ内で同じ値を持つため、結果はグループ内でソートされません。また、MySQLを使用していますか? –

+0

ちょうど試してみましたが、私のsqlite:pがクラッシュしました。しかし、私はすでに知っていた、それは動作するつもりはなかった。 ORDER BYで集約関数を使用する場合は、この列をGROUP BYにする必要があるためです。 @マーク、現在私の問題は解決されています。私の質問は本当に混乱していたので、答えを追加するだけです。私の最初のクエリは期待通りに機能します。 – Perello

答えて

0

SELECT candidats 。* 、AVG "sessiontests" ON "candidats" LEFT JOIN "sessiontests" FROM TOTO AS(test_results.rate_good_answer)。 "candidat_id" = "candidats"。 "ID"
LEFT JOINを"test_results" ON "test_results" 。 "sessiontest_id" = "sessiontests"。 "ID" LEFT "がアンケート" ON "アンケート" に参加します。 "ID" = "test_results"。 "questionnaire_id"
(sessiontests.terminate = "t") AND( "アンケート"カテゴリ "LIKE '%java%') GROUP BY candidats.id ORDE R BY toto